2014-01-10 34 views
1

我很难理解passportjs验证方法是如何工作的,特别是http-bearer策略。了解passportjs验证方法

所以我有两条路由,一条用于注册,另一条用于访问用户的配置文件,它通过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从我的客户端获取令牌?!这对我来说非常困惑,并且让我发疯。任何帮助?

此外,这是做令牌授权的正确方法吗?或者我还需要更多的细节,如时间戳,到期等。

回答