【发布时间】:2019-06-28 15:43:43
【问题描述】:
我正在尝试使用基于令牌的身份验证来实现注册/登录应用程序。我正在使用 NodeJS 的 JWT/express 模块。一切正常,例如登录并在登录后到达其他路线。但是,我无法注销。我尝试了获取/发布/请求,但我仍然得到了这个:
Cannot GET /api/users/logout
和
Cannot POST /api/users/logout
本地主机的状态是 404:未找到,这是我的代码
router.post(`/logout`, (req,res,next) =>{
if(myToken !== ""){
jwt.verify(myToken, `privatekey`, function(err, decoded) {
if (err) {
return res.json({ success: false, message: 'Token is not valid anymore' });
} else {
routes
req.decoded = decoded;
next();
}
});
} else {
res.send(400,`You are not logged in!`);
}
});
myToken 是我登录后用来保存 jwt 令牌的变量。
【问题讨论】:
-
那是因为端点
/api/users/logout不可用。请重新检查您的中间件路由/api/users。我也怀疑你是怎么得到myToken的。我相信您需要从 req.headers (最佳实践)或 req.body (不是那么好,但会完成这项工作)中获得它。谢谢 -
类似地,我也看到有些人将令牌作为路径参数传递,例如
/api/users/logout/your_jwt_token,如果是这种情况,那么您需要在路由文件中更新/logout/:token。如果您仅在/logout路由上将令牌作为路由参数传递,这也将导致无法GET|POST /api/users/logout。 -
请在问题中发布您如何使用
router,例如app.use('/api/user', router)或其他内容。 -
对于第一条评论,有一个中间件功能,并且端点可用。我只是想尝试将令牌保留在里面。但是,我通过重新安排后期操作的顺序解决了问题,但我无法获得逻辑,为什么它会起作用?