2017-01-20 14 views
8

मैं चाहता हूं कि मैं एक टोकन के साथ या बिना राउटर को प्राप्त कर सकूं। उपयोगकर्ता एक टोकन दिया है, की तुलना में मुझे दे req.userमार्ग के साथ या बिना टोकन JWT + PASSPORT

इस तरह:

router.get('/profile', function(req, res) { 
if(req.user) { // or if (req.isAuthenticated()) 
res.send('logged') 
} else { 
res.send('not loggedIn') 
} 
}); 

मेरा ऐप: यदि मैं एक टोकन के बिना /profile तक पहुँचने का प्रयास

var JwtStrategy = require('passport-jwt').Strategy, 
ExtractJwt = require('passport-jwt').ExtractJwt; 
var opts = {} 
opts.jwtFromRequest = ExtractJwt.fromAuthHeader(); 
opts.secretOrKey = 'sh'; 
passport.use(new JwtStrategy(opts, function(jwt_payload, done) { 
User.findOne({id: jwt_payload.sub}, function(err, user) { 
    if (err) { 
     return done(err, false); 
    } 
    if (user) { 
     done(null, user); 
    } else { 
     done(null, false); 
     // or you could create a new account 
    } 
}); 
})); 

, ठीक काम करता है। लेकिन, जब शीर्षक में एक टोकन के साथ पहुँच /profile को एक कोशिश मुझे not loggedIn

मैं, यहां तक ​​कि एक टोकन के बिना इसे उपयोग करने में और अगर मैं एक toke प्रदान की चाहते देते हैं, मुझे उपयोगकर्ता दे।

ps: पहले से ही मार्ग और कार्यों में passport.authenticate('jwt') का उपयोग करके परीक्षण किया गया है। यदि मैं टोकन देता हूं तो मुझे पहुंचने दें, अगर मुझे अनधिकृत न दें।

उत्तर

2

बदलें आप के रूप में

router.get('/profile', authenticateUser(), profile()); 

function authenticateUser(req, res, next) { 
    // your strategy here... 
    if (authenticated) { 
    req.user = user; 
    next(); 
    } else { 
    return res.status(401).send("Not authenticated"); 
    } 
} 

function profile(req, res, next) { 
    var userId = req.user.id; 
    User.findById(userId, function(err, user) { 
    if (err) { return res.status(500).json(err); } 
    return res.json(user); 
    }) 
} 
2

आप नीचे दिए गए का उपयोग करने के अनुरोध डेटा

if (req.params.user) {do something...} 

या

if (req.body.user) {do something...} 

अनुरोध वस्तु में से एक का उपयोग करना चाहिए इस प्रकार रूटर कोई उपयोगकर्ता विशेषता है ।

0

यह मैं इसे कैसे कर रहा हूँ है:

const passport = require('passport'); 

const optionalJwt = function (req, res, next) { 
    if (req.headers['authorization']) { 
    return passport.authenticate('jwt', { session: false })(req, res, next); 
    } 
    return next(); 
}; 

app.get('/my/route', optionalJwt, function (req, res, next) { 
    if (req.isAuthenticated()) { 
    res.send('My name is ' + req.user.name); 
    } else { 
    res.send('I\'m not authenticated :('); 
    } 
}); 

यह अभी भी विफल हो जाएगा यदि प्रमाणन शीर्ष लेख शामिल किया गया है लेकिन टोकन समाप्त हो गया है या यह अवैध है, लेकिन यह उद्देश्य पूरा हो सकता है। मेरे लिए यह किया।

संबंधित मुद्दे