【问题标题】:Display passport.js authentication error message in view在视图中显示 passport.js 身份验证错误消息
【发布时间】:2015-09-22 00:11:31
【问题描述】:

我有一个新的Sails.js 项目,使用Passport.js 对用户进行身份验证。我有基本的身份验证工作(意味着用户可以注册并成功登录),但如果他们没有输入正确的凭据,我想在登录视图中显示相应的错误消息。我不知道如何在视图中打印任何错误消息。

这是我的设置。我有config/passport.js,其中包含以下内容:

var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
bcrypt = require('bcrypt');

passport.serializeUser(function(user, done) {
    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    User.findOne({ id: id } , function (err, user) {
        done(err, user);
    });
});

passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback : true
},
function(req, email, password, done) {

    User.findOne({ email: email }, function (err, user) {
      if (err) { return done(err); }
      if (!user) {
         return done(null, false, { message: 'Please enter a valid email address.' });
      }

      if (!req.body.username) {
        return done(null, false, { message: 'Please enter your username.' });
      }

      bcrypt.compare(password, user.password, function (err, res) {
          if (!res) {
            return done(null, false, {
              message: 'Invalid Password'
            });
          }

          var returnUser = {
            username: user.username,
            email: user.email,
            createdAt: user.createdAt,
            id: user.id
          };

          return done(null, returnUser, {
            message: 'Logged In Successfully'
          });

        });
    });
    }
    ));

然后我有api/controllers/AuthController.js,其中包含以下内容:

var passport = require('passport');

  module.exports = {

   _config: {
     actions: false,
     shortcuts: false,
     rest: false
   },

   login: passport.authenticate('local', { successRedirect: '/',
                            failureRedirect: '/login',
                            failureFlash: true
   }),

   logout: function(req, res) {
     req.logout();
     res.redirect('/login');
   }
 };

同样,如果用户填写正确的凭据,这将正常工作。我使用 Handlebars 作为我的模板引擎,并希望在登录视图中显示错误消息,如下所示:

<div class="alert">{{ message }}</div>

到目前为止,我已经尝试过 {{ failureMessage }} {{ message }} {{ req.flash.failureMessage }} {{ req.flash.err }} {{ req.flash.message }} 无济于事。所以这一切都说,我如何在我的视图中显示适当的错误消息?更好的是,我将如何突出显示我视图中的错误字段?

【问题讨论】:

    标签: javascript node.js express sails.js passport.js


    【解决方案1】:

    乍一看,sails 使用的是 Express 3.0。根据 Passport 文档 (http://passportjs.org/docs),您需要显式添加中间件以支持闪存(他们推荐 https://github.com/jaredhanson/connect-flash)。

    【讨论】:

      【解决方案2】:

      这里不是护照专家,但根据this,您需要做的就是用req.flash('error')重新渲染登录视图:

      res.render("login", {error: req.flash("error")});
      

      然后在车把模板中,显示错误:

      {{ error }}
      

      【讨论】:

        【解决方案3】:

        不知道这是否对你有帮助,布拉德。

        https://stackoverflow.com/a/25151855/3499069

        我认为在您的 serializeUser 通话中,您需要将其设为 user[0].id,但我最近离开了 Passport,所以我可能错了。

        【讨论】:

          【解决方案4】:

          在我看来,你没有包括快速闪光?

          var flash = require('connect-flash');
          app.use(flash());
          

          在你的路由器中添加

          req.flash(type, message);
          

          并使用

          var t = req.flash(type); 
          res.render(view, {flashMessage: t});
          

          【讨论】:

            猜你喜欢
            • 2020-06-03
            • 1970-01-01
            • 2017-10-19
            • 1970-01-01
            • 2015-09-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-20
            相关资源
            最近更新 更多