cra*_*man 6 node.js passport.js
我发现该done()方法(或者success(),如我的调试器所述)也有第三个参数被调用info.任何人都能告诉我传递给它的价值会发生什么变化吗?
编辑
done()我所指的方法是我们必须在策略回调中调用的方法.例如
var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
Run Code Online (Sandbox Code Playgroud)
片段来自这里.可以看出,在某些情况下,a message作为第三个参数传递给对象done().我们如何message在路由方法中访问它?
info是一个可选参数,可以包含可能在验证功能期间确定的其他用户信息,例如角色,用户配置文件或授权.这有助于第三方身份验证策略,因为一旦用户成功通过身份验证,就可以传递有关经过身份验证的用户的这些详细信息.否则,您可能必须在第二次查看它们,这是低效的.
正如loganfsmyth指出的那样,info设置为req.authInfo使得middlware或路由可以在以后访问它.
此外,您可以通过注册transformAuthInfo来进一步转换info对象,如下所示:
passport.transformAuthInfo(function(info, done) {
Client.findById(info.clientID, function (err, client) {
info.client = client;
done(err, info);
});
});
Run Code Online (Sandbox Code Playgroud)
对于LocalStrategy,您可以在已验证的函数中看到信息传递给失败和成功操作.
此外,您还可以指定a type和message属性,这些属性将用于向用户显示的闪存状态信息消息中.(type用户通过身份验证时默认为"成功",否则为"错误").
Flash消息通过request.flash()函数在Express 2.x中工作.这在Express 3.x中被删除 - 如果您需要此功能,建议使用connect-flash中间件.
| 归档时间: |
|
| 查看次数: |
4390 次 |
| 最近记录: |