node.js - 如何注销验证用户
问题描述
我成功登录用户/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);
});
});
我希望注销是全局的。用户必须从每个登录的设备中注销
解决方案
当您使用 JWT 时,您的服务器是无状态的,您的服务器中没有会话。您必须从客户端删除存储的 JWT,或者(但我不喜欢这种技术,这不是一个好习惯)您可以在服务器端存储“已撤销”JWT 的列表,当您注销并检查是否客户端发送的令牌在此列表中。您还可以存储上次注销的日期并检查 JWT 的日期是否比注销日期最旧,如果最旧则 JWT 无效。
推荐阅读
- python - 使用 HDF5 附加模拟数据
- asp.net - 下拉菜单的必填字段,但视图模型类中文本框的可选字段
- sql - 数字时间戳日期差异计算
- python - 我希望能够打印字典中键的名称,然后是描述、值和数量
- php - 选择电子邮件后selectpicker不显示数据
- sql - 我开发了一个 SQL 查询,但出现错误“遇到除以零错误”。
- graphics - 三.js renderer.setPixelRatio() 应该改变渲染对象的大小吗?
- reactjs - 404页面不适用于反应中的嵌套路由
- python - 为列中 True 值的每个子块添加一个序列号
- vba - 自动显示基于单元格值的图像