【问题标题】:Passport.js sending error back to frontendPassport.js 将错误发送回前端
【发布时间】:2020-05-27 23:32:41
【问题描述】:

我在使用 passport.js 登录时无法将错误消息发回前台。

这是我的路线:

users.post('/login',
  passport.authenticate('local'),
  (req, res) => {
    res.sendStatus(201);
  },
);

还有策略:

passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
  },
  async (username, password, done) => {
    // let's assume we are checking here if there is a user in db

    if(user) {
      if(bcrypt.compareSync(password, user.password)) {
        return done(null, user);
      }
    } else {
        return done(null, false, { message: 'No user in db' });
    }
  }
));

这让我在浏览器中出现401 Anauthorized 错误。但是,我也想传递消息(“数据库中没有用户”),并可能更改状态代码。

【问题讨论】:

    标签: node.js passport.js


    【解决方案1】:

    试试这个,回调中的第一个参数是错误参数

    passport.use(new LocalStrategy({
        usernameField: 'email',
        passwordField: 'password',
      },
      async (username, password, done) => {
        // let's assume we are checking here if there is a user in db
    
        if(user) {
          if(bcrypt.compareSync(password, user.password)) {
            return done(null, user);
          }
        } else {
            return done({ message: 'No user in db' }, false);
        }
      }
    ));
    

    【讨论】:

    • 是的,我现在可以在前端看到它,但不幸的是我在500 状态码错误下得到它
    • 我尝试了一种自定义策略,但它仍然给我一个 401。奇怪
    • 这确实很奇怪,但无论如何我该如何更改状态码?
    • 第一个答案有解决方案:stackoverflow.com/questions/15711127/…
    猜你喜欢
    • 2020-03-16
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2020-05-30
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多