我已经跟着这个tutorial到最后并制作了一份工作样本。
但是现在,我试图了解有关身份验证的更多信息。例如,如果您注册并登录,一切正常。但是,如果我从数据库中删除该用户该怎么办?在UI中,用户只是保持登录状态,即使他不存在......
我有什么遗失的东西吗?或者我只需要在每次加载时检查数据库?
谢谢!
答案 0 :(得分:0)
在您提供的教程中,有一节说明:
我们将使用localStorage将数据持久保存到客户端。这个 为我们提供了一个更简单的界面,用于跨会话保存数据 无需处理解析cookie或处理cookie 多个域名。如果localStorage中存在JWT令牌,我们可以假设 只要令牌未过期,用户就会登录。记录一个 用户输出,只需从localStorage中删除令牌即可。看看 关于MDN的localStorage文档,以便更好地理解 localStorage的。
如果在使用同一用户登录后直接从数据库中删除用户,则身份验证令牌仍会出现在浏览器的本地存储中。但是,如果您清理浏览器的本地存储(或者只是将身份验证令牌的过期日期更改为过去的某个日期),您将看到如果再次访问您的应用程序,您将无法登录,甚至无法登录自该数据库中删除以来,该用户已登录。
关于数据库检查,我认为数据库只在您登录时检查一次(即检查用户是否存在且密码是否正确)。成功登录后,将创建客户端令牌,并且不再需要对登录用户进行数据库检查。
编辑:
OP要求:
实现自定义中间件的方法有很多种。基本的一个是How to intercept node.js express request中提到的:
var myFunc = function (req, res, next) {
// Check if user is valid
// If it is valid
next();
// If it is not valid
res.status(401);
};
app.post('/my-route', myFunc, anotherFunc);
快速路由中的中间件放置顺序非常重要。
提出/my-route
请求后,系统会调用myFunc
。在该功能中,您可以检查用户是否被禁用。如果它有效“next()”将告诉express将一个移动到下一个中间件anotherFunc
。如果用户无效res.status(401);
,则表示将快速跳过其他其他middlware并使用状态码401回答该请求。