【问题标题】:Passport.js change default error messagePassport.js 更改默认错误消息
【发布时间】:2018-06-04 17:06:15
【问题描述】:

我在我的 node/express 应用程序中使用 Passport.js 进行身份验证,当输入字段为空时,护照显示默认消息“缺少凭据”,我该如何更改?说诸如请填写表格之类的话

这里是我的本地登录策略:

  passport.use('login', new LocalStrategy({
      usernameField: 'email',
      passwordField: 'password'
    },
    function(email, password, done) {
      models.User.findOne({where: {email}}).then(user => {
        if (!user)
          return done(null, false, {message: 'Email not registered'});
        user.checkPassword(password).then(res => {
          if (!res)
            return done(null, false, {message: 'Incorrect username or password'});
          return done(null, user);
        });
      });
    }));

登录路径:

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

【问题讨论】:

  • 你可以试试if (!email && !password) return done(null, false, { message: "Missing credentials" })
  • models.User.findOne...行之前试试
  • 我已经试过了,还是不行
  • 它说什么?它有输出吗?
  • 是的,没有任何改变

标签: node.js express passport.js


【解决方案1】:

我明白了,看来我可以通过可选回调来验证函数以覆盖默认功能,感谢 oneturkmen 提供参考。

这里是修改后的路线:

router.post('/signup', (req, res) => {
  passport.authenticate('signup', (err, user, info) => {
    const body = req.body;
    if (req.body.username === '' || req.body.email === '' || req.body.password === '')
      info.message = 'Please fill the form';
    req.logIn(user, err => {
      if (err) res.render('users/signup', info);
      else res.redirect('/');
    });
  })(req, res);
});

【讨论】:

    【解决方案2】:

    另一种方法是将“badRequestMessage”添加到您的代码中

    您的代码将如下所示

    router.post('/login', passport.authenticate('login', {
      successRedirect: '/',
      failureRedirect: '/login',
      badRequestMessage : 'Please fill the form',
      failureFlash: true
    }));
    

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 2018-12-01
      • 2012-01-24
      • 2021-08-08
      相关资源
      最近更新 更多