javascript - 如何在登录后重定向到页面,同时使用 Express 将 token 作为处理程序发送到中间件

标签 javascript node.js reactjs express next.js

我在我的应用程序中使用 nextJS、express JS 和 JWT。我设置了 2 个页面登录和管理,其中管理页面受到保护,只有在通过 JWT 验证 token 后才能访问。我愿意在成功登录后立即重定向到管理页面。

token 在成功登录后生成并存储在本地存储中,而管理页面则使用验证 token 的中间件进行保护。

这里我面临两个问题:

1) 如何在成功登录后立即重定向?

2)如何将存储在 localstorage 中的 token 作为 header 发送到中间件函数?

请看下面我的代码

// SUBMIT BUTTON CLICK
checkCredential = async e => {
  e.preventDefault();

 const respsonse = await axios.post("/api/admin/login", this.state);
 const { token } = respsonse.data;
 localStorage.setItem("auth-token", token);

};

// THIS END POINT HIT FOR LOGIN CHECKS

login: async (req, res) => {
 const adminExist = await Admin.findOne({ email: req.body.email });
 if (!adminExist) return res.status(400).send("Email doest exists");

 const validPass = req.body.password === adminExist.password;
 if (!validPass) return res.status(400).send("Incorrect Password");

 const token = jwt.sign({ id: adminExist._id }, "KEY_HERE");
 res.set("auth-token", token);
 return res
  .json({ token })
  .redirect(301, "/admin"); //this is working but redirecting isn't reflecting on my screen
}

//  ADMIN PAGE IS PROTECTED BY MIDDLEWARE

 server.get("/admin", verifyToken, (req, res) => {
  return handle(req, res);
});

// MIDDLEWARE VERIFY TOKEN
  verifyToken = (req, res, next) => {
const token = req.header("auth-token");

if (!token) return res.status(401).send("Access Denied");

try {
  const verified = jwt.verify(token, "HEY_HERE");
  req.user = verified;
  next();
} catch (err) {
  res.status(400).send("Invalid Token");
}
};

准确地说,我想在成功登录后立即重定向到管理页面,并且通过用户尝试成功登录、生成 token 并将其存储在本地存储中来实现。 token 立即作为从本地存储获取的 header 传递到中间件(verifyToken),并且路由重定向到管理页面。

最佳答案

如果我理解正确的话,登录(后端的 ExpressJS)方法会检查用户凭据,仅此而已,所有路由都必须从前端实现。您不会从后端重定向客户端,而是将登录成功或失败的 JSON 对象传递回前端。

login: async (req, res) => {
 //...
 return res
  .json({ token, success: true })
  //this is working but redirecting isn't reflecting on my screen
  //.redirect(301, "/admin");
}

然后在前端(NextJS/ReactJS)中,您通过检查 JWT token 是否有效以及用户是否有权访问资源来实现资源保护。

这对于实现 JWT 后端+前端来说确实是一个很好的资源:https://medium.com/@faizanv/authentication-for-your-react-and-express-application-w-json-web-tokens-923515826e0

关于javascript - 如何在登录后重定向到页面,同时使用 Express 将 token 作为处理程序发送到中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57042296/

相关文章:

javascript - 来自两个不同帐户的双谷歌分析代码?

javascript - 先加载脚本文件,加载前在div上执行

javascript - 这段 Javascript 代码中 "return"的意义

node.js - 如何在一次操作中保存 SailsJS 中的多条记录?

javascript - 如何使用 React 组件处理递归数组映射?

javascript - 给定经度和纬度位置,我如何旋转一个对象,使其远离球体

sql - 使用 sequelize 处理竞争条件容易出错的代码

node.js - Hyperledger Fabric教程 "Error: unknown flag: --peerAddresses"

javascript - ReactJS - 复选框 onChange 事件未触发

reactjs - 适用于 GraphQL 的 AWS Amplify 和 Apollo 客户端之间的区别?