使用Passport身份验证而不使用successRedirect选项

问题描述 投票:0回答:1

我正在使用具有以下配置的本地策略:

passport.use(
  new LocalStrategy((username, password, done) => {
    process.nextTick(() => {
      findByUsername(username, (err, user) => {
        if (err) {
          return done(err);
        }
        if (!user) {
          return done(null, false, { message: `Unknown user ${username}` });
        }
        if (user.password !== password) {
          return done(null, false, { message: "Invalid password" });
        }
        return done(null, user);
      });
    });
  })
);

login终点定义如下:

server.post(
  "/login",
  passport.authenticate("local", {
    successRedirect: "/",
  })
);

这可以按预期成功运行,但是我不需要使用successRedirect选项,但如果我删除此选项,我在执行请求时会收到404状态代码响应:

POST http://localhost:3001/login 404(未找到)

这是没有successRedirect的代码:

server.post("/login", passport.authenticate("local"));

我也尝试用其他选项设置authenticate但没有successRedirect,但是我得到了相同的错误信息。

我正在使用的依赖版本是:express 4.16.4passport 0.4.0passport-local 1.0.0

node.js express passport.js middleware passport-local
1个回答
0
投票

试试这个

 passport.authenticate('local',function (err, user, info) { 

     if(err){
       res.redirect('/login')
     } else{
      if (! user) {
        res.redirect('/login')
      } else{
        req.login(user, function(err){
          if(err){
          res.redirect('/login')
          }else{
       res.redirect('/success')
          }
        })
      }
     }
  })(req, res);
© www.soinside.com 2019 - 2024. All rights reserved.