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

Solutions Collecting From Web of "Node.js + Passport:done()方法中第三个参数'info'会发生什么?"

您应该能够访问作为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函数中看到信息传递给失败和成功操作。

另外,您还可以指定typemessage属性,这些属性将用于显示给用户的闪存状态信息消息。 (当用户通过validation时, type默认为“成功”,否则input“错误”)。

Flash消息通过request.flash()函数在Express 2.x中运行。 这在Express 3.x中已被删除 – 如果您需要此function,build议使用连接闪存中间件。