Node.js + Passport:done()方法中第三个参数'info'会发生什么?
我发现done()
方法(或success()
,由我的debugging器告诉)有第三个参数以及称为info
。 谁能告诉我什么值得传递给它?
编辑
我所指的done()
方法是我们必须在策略callback中调用的方法。 例如
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); }); } ));
片段是从这里 。 正如可以看到的,在某些情况下,一个message
被传递给一个对象作为done()
第三个参数。 我们如何在路由方法中访问这条message
?
您应该能够访问作为req.authInfo
作为第三个parameter passing的信息。
你可以在这里看到处理info
,它被分配给authInfo
并用于flash消息。
info
是一个可选参数,可以包含额外的用户信息,例如angular色,用户configuration文件或授权,这些信息可能在validationfunction期间已经确定。 这有助于第三方身份validation策略,因为一旦通过身份validation的用户身份validation后,这些身份validation用户的详细信息就可以一起传递。 否则,你可能不得不在第二次查看它们,这是低效的。
正如loganfsmyth指出的那样, info
被设置为req.authInfo
以便中间件或者路由可以在以后访问它。
此外,您可以通过注册transformAuthInfo来转换info对象,如下所示:
passport.transformAuthInfo(function(info, done) { Client.findById(info.clientID, function (err, client) { info.client = client; done(err, info); }); });
对于LocalStrategy,您可以在validation函数中看到信息传递给失败和成功操作。
另外,您还可以指定type
和message
属性,这些属性将用于显示给用户的闪存状态信息消息。 (当用户通过validation时, type
默认为“成功”,否则input“错误”)。
Flash消息通过request.flash()函数在Express 2.x中运行。 这在Express 3.x中已被删除 – 如果您需要此function,build议使用连接闪存中间件。