简体   繁体   中英

Passport jwt returns unauthorized with status code 401

passport.js

module.exports = (passport) => {
passport.use(new LocalStrategy({
    usernameField: 'username',
    passwordField: 'password'
},
    (username, password, done) => {
        user.findOne(({ username: username }), async (err, user) => {
            if (err) { return done(err); }
            if (!user) { return done(null, false); }
            const cpassword = await bcrypt.compare(password, user.password);
            if (!cpassword) { return done(null, false); }
            console.log(user._id)
            const token = jwt.sign(
                {
                    id: user._id,
                    username: user.username
                },
                "shubham"
            );
            adminRecords = {
                token: token
            }

            return done(null, user, adminRecords);
        });
    }
));
passport.use(new JwtStrategy({
    jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
    secretOrKey   : 'key'
}, function(jwt_payload, done) {
    console.log('1')
    user.findOne({id: jwt_payload.sub}, function(err, user) {
        if (err) {
            return done(err, false);
        }
        if (user) {
            return done(null, user);
        } else {
            return done(null, false);
            // or you could create a new account
        }
    });
 }));
};

passport.serializeUser(function (user, done) {
 done(null, user)
})

passport.deserializeUser(function (id, done) {
 user.find(id, function (err, user) {
    done(err, user)
 });
}); 

route.js

router.post('/profile', passport.authenticate('jwt', { session: false }),
function(req, res) {
    console.log('1')
    res.send(req.user.profile);
 }
);

I am trying passport-jwt strategy and it returns unauthorized with status code 401 whereas token is generating. I am using token x-acccess-token=jwtToken but it returns unauthorized.

What can I try to debug this?

try to set in the header

Authorization: Bearer TOKEN

you should have space between token and bearer

replace the jwtFromRequest: as below and try out

jwtFromRequest:ExtractJwt.fromAuthHeaderWithScheme('JWT');

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM