【问题标题】:How to pass PassportJS message to React frontend in Express如何将 PassportJS 消息传递给 Express 中的 React 前端
【发布时间】:2023-02-09 02:21:43
【问题描述】:

我一直在使用 passport-local 进行用户身份验证,并且一直在努力将诸如“用户名不存在”或“密码不匹配”之类的自定义消息从服务器发送到 React 前端。

const user = await User.findOne({ email });
if (!user) {
  console.log("No user`");
  return done(null, false, {
    message: "User with this email ID doesn't exist",
  });
}

我目前的方法是一个非常 hacky 的方法,只是在 express 函数中传递 passport.authenticate 函数。

authRouter.post("/login", (req, res, next) => {
  passport.authenticate("local", (err, user, info) => {
    const error = err as Error;
    if (error) {
      return res.status(500).json({ message: error.message });
    }

    if (info) {
      return res.status(400).json({ message: info.message });
    }

    req.logIn(user, (error) => {
      if (error) {
        return res.status(500).json({ message: error.message });
      }

      return res.json(user);
    });
  })(req, res, next);
});

有一个更好的方法吗?我也尝试过将 connect-flash 与护照一起使用,但无法完全正常工作。

【问题讨论】:

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


    【解决方案1】:

    这是我的代码:

    passport.use(new LocalStrategy(
      const user = await User.findOne({ email });
      if (!user) {
        console.log("No user`");
        return done(null, false, {
          message: "User with this email ID doesn't exist",
        });
      }
    
    authRouter.post("/login", passport.authenticate( "local", {
      successReturnToOrRedirect: "Your_route",
      failureRedirect: "/login",
      failureMessage: true,
    }))
    ))
    

    以及当您要向后端发送失败消息时:

    if (req.session.messages) {
      //you can send req.session.message[0]   
    }
    

    如果你有session-express,你应该在发送req.session.message[0]后删除session:

      delete req.session.messages
      req.session.save()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多