如何使用Passport.js策略向前端发送消息

时间:2019-11-20 17:58:22

标签: javascript node.js express passport.js

这里有Passport.js的新手试图做一件简单的事情。我只想向我的前端发送自定义消息,即时消息使用“ passport”:“ ^ 0.4.0”,“ express”:“ ^ 4.17.0”和“ passport-local”:“ ^ 1.0”。 0“,但我似乎无法正常工作。我发现Express 4与此不同,它尝试下载connect-flash,但没有设法使其正常工作。

这通常会发送一条错误消息:

res.status(401).send({
    message: 'Authentication key expired'
});

现在我正尝试通过护照策略来实现这一目标,但似乎没有向客户端发送任何东西,但它发送了没有自定义消息的通用401:

  passport.use(
    new LocalStrategy({usernameField: "login", passwordField: "password"}, (login, password, done) => {
      User.findByLogin(login).then(async user => {
        if (!user) {
          return done(null, false, { message: 'Incorrect username.' });
        }
        if (!user.validPassword(password)) {
          return done(null, false, { message: 'Incorrect password.' });
        }
        let subscription = await user.getValidSubscription();
        if (!subscription) {
          return done(null, false, {
            message: 'Your subscription has expired.'
          });
        }
        user.dataValues.expiration = subscription.expiration;
        return done(null, user);
      });
    })
  );

再次,我知道这是Flash消息和其他内容的问题,但是难道没有一种简单的方法可以发送自定义消息吗?我所需要的只是“错误的用户名”到达了我的前端。 我花了几天的时间,仍然没有。 预先谢谢你!

Edit1:更清晰。

1 个答案:

答案 0 :(得分:0)

尝试使用npm install connect-flash

安装Flash

然后转到您的app.js文件并编写以下内容:

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

您的护照功能内 加上这个 passReqToCallback

{ usernameField : 'login', passwordField : 'password', passReqToCallback : true }// allows us to pass back the entire request to the callback

然后在参数(登录,密码,完成)中,您可以像这样(req,login, password, done)

传递请求对象

最后,您可以发送这样的消息

if (!user.validPassword(password)) { return done(null, false, req.flash('signupMessage', 'Incorrect username.')); }