javascript - Passport JWT req.user is undefined in one of my routes -


i'm having absolute nightmare trying set jwt express app! think i've got working now, have register route , login route both work correctly , generate valid tokens , have route in '/users' route test authentication , fine. have file containing routes '/api' authentication important , have similar test route tries access req.user (just in other route) seems req.user undefined. through debugging looks user in req.account odd , don't understand why not in req.user

i define jwt strategy in /config/passport.js

'use strict'; const user = require('../models/user'),       config = require('./main'),       jwtstrategy = require('passport-jwt').strategy,       extractjwt = require('passport-jwt').extractjwt;  //exported used passport in server set module.exports = function (passport) {   const jwtoptions = {       // telling passport check authorization headers jwt     jwtfromrequest: extractjwt.fromauthheader(),     // telling passport find secret     secretorkey: config.secret   };    const jwtlogin = new jwtstrategy(jwtoptions, function(payload, done) {     user.findbyid(payload._id, function(err, user) {       if (err) { return done(err, false); }        if (user) {         done(null, user);       } else {         done(null, false);       }     });   });    passport.use(jwtlogin);  } 

passport passed argument , initialised in main express file

here /users route file, works fine. sending request /users/isauth authorization header , 'jwt ' works fine , username sent me

"use strict"; const   express = require('express'),         router = express.router(),         jwt = require('jsonwebtoken'),         user = require('../models/user'),         config = require('../config/main'),         passport = require ('passport');  function generatetoken(user) {     return jwt.sign({_id: user._id}, config.secret, {         expiresin: 10080     }); } . . here routes login , register perform expected . , work fine . /*  ==================================        test authentication route     ================================== */ router.get('/isauth', passport.authenticate('jwt', { session: false }), function(req, res) {     console.log(req.user);     res.json({username: req.user.username}); });    module.exports = router; 

in file though, api routes sending request /api/testauth same before same token , same headers no req.user , in console see req.user undefined. in console there seem user object req.account? don't understand happening here can help!

"use strict"; const   express = require('express'),         router = express.router(),         jwt = require('jsonwebtoken'),         server = require('../models/server'),         passport = require('passport');  // test route see if logged in user matt router.get('/testauth', passport.authorize('jwt', { session: false }), function(req, res) {     console.log(req.user);     if (req.user) {         if(req.user.username == "matt") {         res.send("you matt!");         } else {         res.send("you not matt!");         }     } else {         res.send("no req.user");     }  })  module.exports = router; 

you using passport.authorize in testauth route, users logged in , have session information. since not using session storage not have persistent req.user object , should use passport.authenticate on routes

http://passportjs.org/docs/authorize


Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -