Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在登录后重定向到页面,同时使用express将令牌作为hander发送到中间件_Javascript_Node.js_Reactjs_Express_Next.js - Fatal编程技术网

Javascript 如何在登录后重定向到页面,同时使用express将令牌作为hander发送到中间件

Javascript 如何在登录后重定向到页面,同时使用express将令牌作为hander发送到中间件,javascript,node.js,reactjs,express,next.js,Javascript,Node.js,Reactjs,Express,Next.js,我正在为我的应用程序使用nextJS、express JS和JWT。我已经设置了两个页面登录和管理,其中管理页面受到保护,只有在JWT验证令牌后才能访问。我愿意在成功登录后立即重定向到管理页面 令牌在成功登录后生成并存储在本地存储器中,而管理页面则使用验证令牌的中间件进行保护 在这里,我面临两个问题: 1) 成功登录后如何立即重定向 2) 如何将存储在localstorage中的令牌作为头发送到中间件函数 请看下面我的代码 // SUBMIT BUTTON CLICK checkCredenti

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

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

在这里,我面临两个问题:

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

2) 如何将存储在localstorage中的令牌作为头发送到中间件函数

请看下面我的代码

// 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");
}
};

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

如果我理解正确,login(后端的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令牌是否有效以及用户是否具有访问资源的权限,实现对资源的保护


这对于实现JWT后端+前端来说确实是一个很好的资源:

如果我理解正确,login(后端的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令牌是否有效以及用户是否具有访问资源的权限,实现对资源的保护


这是实现JWT后端+前端的非常好的资源:

Hi@Janiis。谢谢你的意见。问题是我正在使用nextJS,它是服务器端渲染库。我必须从后端重定向我的路由,因为在nextJS中从后端呈现。如果我在react路由器dom中使用ReactJS。这会容易得多。无论如何Thanks@NoorMuhammad感谢您的回复,这取决于应用程序的结构和实现。我已经使用NextJS(SSR)实现了JWT,用户可以访问前端的资源,使用HOC for Auth和getInitialProps从服务器获取带有标题的数据(JWT cookie)没有问题。谢谢。现在问题解决了。路由由下一个js路由器自己完成,报头由express.Hi@Janiis中的res.set方法设置。谢谢你的意见。问题是我正在使用nextJS,它是服务器端渲染库。我必须从后端重定向我的路由,因为在nextJS中从后端呈现。如果我在react路由器dom中使用ReactJS。这会容易得多。无论如何Thanks@NoorMuhammad感谢您的回复,这取决于应用程序的结构和实现。我已经使用NextJS(SSR)实现了JWT,用户可以访问前端的资源,使用HOC for Auth和getInitialProps从服务器获取带有标题的数据(JWT cookie)没有问题。谢谢。现在问题解决了。路由由下一个js路由器本身完成,报头由express中的res.set方法设置。