Passport-local检查DB中是否存在用户

时间:2015-11-27 16:49:28

标签: angularjs node.js express mean-stack passport-local

我已经跟着这个tutorial到最后并制作了一份工作样本。

但是现在,我试图了解有关身份验证的更多信息。例如,如果您注册并登录,一切正常。但是,如果我从数据库中删除该用户该怎么办?在UI中,用户只是保持登录状态,即使他不存在......

我有什么遗失的东西吗?或者我只需要在每次加载时检查数据库?

谢谢!

修改:This is my code

1 个答案:

答案 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回答该请求。