首页 > 解决方案 > 如何注销验证用户

问题描述

我成功登录用户/login并能够显示我的/profile路线信息。

现在,我正在尝试对/logout用户进行身份验证,但似乎它不起作用。尝试通过注销路线时,什么也没有发生。JWT 令牌不会过期,因此/profile即使在单击注销后数据仍然存在。

//logout testing
router.post('/logout' , checkAuth, (req, res) => {     
            req.logOut();
            res.status(200).send(["logged out"]).redirect('/login');
});

这是我的/个人资料:-

router.get('/profile', checkAuth, (req, res, data) =>{  
    User.find(req.userData, function(err, users) {
    res.send(req.userData);
  });
});

我希望注销是全局的。用户必须从每个登录的设备中注销

标签: node.jsrouteslogout

解决方案


当您使用 JWT 时,您的服务器是无状态的,您的服务器中没有会话。您必须从客户端删除存储的 JWT,或者(但我不喜欢这种技术,这不是一个好习惯)您可以在服务器端存储“已撤销”JWT 的列表,当您注销并检查是否客户端发送的令牌在此列表中。您还可以存储上次注销的日期并检查 JWT 的日期是否比注销日期最旧,如果最旧则 JWT 无效。


推荐阅读