无法使用 passport-jwt 访问受保护的路由
cannot access protected route with passport-jwt
我无法对秘密资源进行身份验证,我正在使用登录令牌进行调用,但每次响应时我都未获得授权。
passport.use(
new JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader("Authorization"),
secretOrKey: jwtSecret
},
async (payload, done) => {
try {
const user = await User.findById(payload.sub);
console.log(payload.sub);
if (!user) {
return done(null, false);
}
done(null, user);
} catch (error) {
done(error, false);
}
}
)
);
controllers/users.js :
const signToken = user => {
return jwt.sign(
{
iss: "nikname",
iat: new Date().getTime(),
sub: user._id,
exp: new Date().setTime(new Date().getDate() + 1)
},
jwtSecret
);
};
路线:
router.route('/secret')
.get(passport.authenticate('jwt',{session: false}),usersController.secret);
由于错误不明确,我无法找出问题所在。
有帮助吗?
非常感谢
使用 jwt 调试器后,似乎 payload 有问题,虽然调试器显示了经过验证的令牌符号,但 'exp' 和 'iat' 显示了错误的日期,所以我更改了像这样的 signToken 常量:
const signToken = user => {
return jwt.sign(
{
iss: "nikname",
sub: user.id,
},
jwtSecret,
{
expiresIn: '2d'
}
);
};
经过研究,fromHeader(提取器)似乎在 passport-jwt@4.0.0 中运行不佳,所以我改用 fromAuthHeaderWithScheme 。像这样:
jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('JWT'),
现在一切正常。
我无法对秘密资源进行身份验证,我正在使用登录令牌进行调用,但每次响应时我都未获得授权。
passport.use(
new JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader("Authorization"),
secretOrKey: jwtSecret
},
async (payload, done) => {
try {
const user = await User.findById(payload.sub);
console.log(payload.sub);
if (!user) {
return done(null, false);
}
done(null, user);
} catch (error) {
done(error, false);
}
}
)
);
controllers/users.js :
const signToken = user => {
return jwt.sign(
{
iss: "nikname",
iat: new Date().getTime(),
sub: user._id,
exp: new Date().setTime(new Date().getDate() + 1)
},
jwtSecret
);
};
路线:
router.route('/secret')
.get(passport.authenticate('jwt',{session: false}),usersController.secret);
由于错误不明确,我无法找出问题所在。 有帮助吗? 非常感谢
使用 jwt 调试器后,似乎 payload 有问题,虽然调试器显示了经过验证的令牌符号,但 'exp' 和 'iat' 显示了错误的日期,所以我更改了像这样的 signToken 常量:
const signToken = user => {
return jwt.sign(
{
iss: "nikname",
sub: user.id,
},
jwtSecret,
{
expiresIn: '2d'
}
);
};
经过研究,fromHeader(提取器)似乎在 passport-jwt@4.0.0 中运行不佳,所以我改用 fromAuthHeaderWithScheme 。像这样:
jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('JWT'),
现在一切正常。