我有一个带有Angular(4.3)前端的Sails.js Web API。 Angular正在发送请求,并在标头中设置了Bearer令牌,我已经确认该部分正在按预期工作。
我在项目中安装了passport
和passport-jwt
。这是我的sails/config/passport.js
文件:
const JWT_STRATEGY_CONFIG = {
secretOrKey: SECRET,
issuer: ISSUER,
audience: AUDIENCE,
passReqToCallback: true,
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
algorithms: ['HS256', 'HS384']
};
function _onJwtStrategyAuth(payload, next) {
// Got this part from a tutorial
// https://ericswann.wordpress.com/2015/04/24/nozus-js-1-intro-to-sails-with-passport-and-jwt-json-web-token-auth/
// unfortunately, it was written 2 1/2 years ago :/
const user = payload.user;
return next(null, user, {});
}
passport.use(new JwtStrategy(JWT_STRATEGY_CONFIG, _onJwtStrategyAuth));
如上所述,在_onJwtStrategyAuth
函数中,我得到了几年前的函数from a tutorial。问题是,即使我在该验证函数中什么也不做,它也不会改变我的authenticate
函数中的结果:
passport.authenticate('jwt', (error, user, done) => {
if (error || !user) {
return res.forbidden();
}
return next();
})(req, res);
在该authenticate函数中,错误始终为null,user为false,done是一个似乎是错误的对象。
我不知道应该从哪里开始。我需要在标题中获取令牌,确认它是有效的,然后允许人们从我的API获取信息。
非常感谢任何帮助。