护照令牌未被授权
passport token is not being authorized
const JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('../models/User');
const key = require('./keys').secret;
const mongoose = require('mongoose');
var opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = key;
module.exports = (passport) => {
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
console.log(jwt_payload);
User.findById(jwt_payload.id, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
return done(null, user);
} else {
return done(null, false);
}
});
}))
}
我正在使用 passport-jwt stratergy 来验证令牌,但是这个文件不正确 运行 我什至试图在这里控制有效负载,但这甚至没有记录它
passport.use(new JwtStrategy(opts, function(jwt_payload, done)
console.log(jwt_payload);
令牌策略
const payload = {
id: user.id,
username: user.username,
name: user.name
}
const token = jwt.sign(payload, config.secret, { expiresIn: 36000 });
return res.json({
success: true,
token: 'JWT ' + token,
user: {
id: user.id,
name: user.name,
username: user.username
}
})
当我在受保护的路线上使用它时,它没有授权受保护的路线
结果=未授权
router.get('/profile', passport.authenticate('jwt', { session: false }), (req, res) => {
res.send("Profile");
});
您的身份验证不起作用的原因是您使用了旧令牌前缀 "JWT" 和现代 JWT (fromAuthHeaderAsBearerToken
) 提取器作为您策略的一个选项。
您可以执行以下步骤之一来解决问题:
- 将令牌前缀更改为
'Bearer ' + token
更改令牌提取器:
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme("JWT");
const JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('../models/User');
const key = require('./keys').secret;
const mongoose = require('mongoose');
var opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = key;
module.exports = (passport) => {
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
console.log(jwt_payload);
User.findById(jwt_payload.id, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
return done(null, user);
} else {
return done(null, false);
}
});
}))
}
我正在使用 passport-jwt stratergy 来验证令牌,但是这个文件不正确 运行 我什至试图在这里控制有效负载,但这甚至没有记录它
passport.use(new JwtStrategy(opts, function(jwt_payload, done)
console.log(jwt_payload);
令牌策略
const payload = {
id: user.id,
username: user.username,
name: user.name
}
const token = jwt.sign(payload, config.secret, { expiresIn: 36000 });
return res.json({
success: true,
token: 'JWT ' + token,
user: {
id: user.id,
name: user.name,
username: user.username
}
})
当我在受保护的路线上使用它时,它没有授权受保护的路线
结果=未授权
router.get('/profile', passport.authenticate('jwt', { session: false }), (req, res) => {
res.send("Profile");
});
您的身份验证不起作用的原因是您使用了旧令牌前缀 "JWT" 和现代 JWT (fromAuthHeaderAsBearerToken
) 提取器作为您策略的一个选项。
您可以执行以下步骤之一来解决问题:
- 将令牌前缀更改为
'Bearer ' + token
更改令牌提取器:
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme("JWT");