我很难理解passportjs身份验证方法的工作原理,尤其是http-bearer策略。
所以我有两条路线,一条用于注册,另一条用于访问用户的个人资料,这些路由通过passportjs中间件。看看下面的代码:
exports.register = function(req, res){
User.schema.statics.generateUserToken(function(t){
var user = new User({
token: t,
name: 'john doe',
});
user.save(function(e){
res.json(user)
});
});
};
我的身份验证策略如下:
var mongoose = require('mongoose'),
passport = require('passport'),
BearerStrategy = require('passport-http-bearer').Strategy;
passport.use(new BearerStrategy(
function(token, done) {
User.findOne({ token: token }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
return done(null, user, { scope: 'read' });
});
}
));
正如您所看到的,当用户请求注册时,我的服务器会返回他的对象,其对象应该在本地保存。
然后,在受保护的路线中,我添加了passportjs中间件,如下所示:
app.get('/me', passport.authenticate('bearer', { session: false }), routes.me);
我明显得到了未经授权的错误。为什么这个'passport.authenticate从我的客户那里得到令牌?!这对我来说真的很混乱,让我发疯。有什么帮助吗?
此外,这是进行令牌授权的正确方法吗?或者我还需要更多细节,如时间戳,过期等?
答案 0 :(得分:0)
请您参考http-bearer的示例代码:https://github.com/jaredhanson/passport-http-bearer/blob/master/examples/bearer/app.js来重构您的代码库。我认为这里的定义非常明确。