我正在尝试发送在我的验证回调中设置的信息消息:
以下是护照文档中的示例:
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);
});
}
));
但是,如果我将我的路线写为:
app.post('/login',
passport.authenticate('local'),
function(req, res) {
// If this function gets called, authentication was successful.
// `req.user` contains the authenticated user.
res.redirect('/users/' + req.user.username);
});
不会使用信息消息调用该函数。至少不是我所知道的。我知道护照将用户推入req,因为我可以从req.user访问它。有没有办法访问这样的信息消息。或者我是否需要指定自定义回调?
他们概述为:
app.get('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/users/' + user.username);
});
})(req, res, next);
});
令人困惑的部分是他们在完成回调(来自验证)中使用第3个参数作为消息进行概述,但是如果您编写自定义回调,则只能访问该参数。是真的。
答案 0 :(得分:0)
Passport
框架中采用的惯例是可选的info
对象将通过req.authInfo
提供。
然而,这取决于所使用的策略,该策略负责将其传递给Passport框架。例如,info
策略不会在passport-local
执行时将app.post('/login',
passport.authenticate('local'),
function (req, res) {
if (req.authInfo) {
// req.authInfo.message will contain your actual message.
}
});
对象转发到Passport。
以下是如何在受本地策略保护的控制器中访问它:
const std::__cxx11::basic_string<char>