【问题标题】:Use Passport authenticate without successRedirect option使用 Passport 身份验证而不使用 successRedirect 选项
【发布时间】:2019-07-08 21:44:09
【问题描述】:

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

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

【问题讨论】:

  • 您可以在带有响应的护照后添加其他中间件,并删除身份验证重定向成功。在documentation 你可以看到一个这样的例子。
  • 谢谢,它成功了。这是我在我的案例中使用的语法:server.post("/login", passport.authenticate("local"), (req, res) => { res.sendStatus(201); });

标签: node.js express passport.js middleware passport-local


【解决方案1】:

试试这个

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2019-01-31
    • 2020-01-25
    • 1970-01-01
    • 2015-05-18
    • 2019-12-20
    • 2015-08-22
    相关资源
    最近更新 更多