从验证回叫发送信息消息到客户端

时间:2015-06-09 21:40:50

标签: node.js passport.js

我正在尝试发送在我的验证回调中设置的信息消息:

以下是护照文档中的示例:

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个参数作为消息进行概述,但是如果您编写自定义回调,则只能访问该参数。是真的。

1 个答案:

答案 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>