使用JWT进行Sails.js Passport身份验证

时间:2017-11-21 23:08:31

标签: javascript sails.js passport.js

我有一个带有Angular(4.3)前端的Sails.js Web API。 Angular正在发送请求,并在标头中设置了Bearer令牌,我已经确认该部分正在按预期工作。

我在项目中安装了passportpassport-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获取信息。

非常感谢任何帮助。

0 个答案:

没有答案