isAuthenticated() 如何真正起作用?

Posted

技术标签:

【中文标题】isAuthenticated() 如何真正起作用?【英文标题】:How isAuthenticated() really works? 【发布时间】:2018-03-23 12:50:54 【问题描述】:

我开始学习 node/express js,并且我使用 passport 创建了一个登录系统,但是我想在我的系统中创建一个 member page 只有已经登录的用户才能访问,经过一些研究我发现答案here,使用isAuthenticated()“这在文档中没有很好地提及”非常容易,

但是实际上我不明白它是如何工作的,程序如何知道用户是否登录! ,如果有人能帮我解决这个问题,我非常感谢

【问题讨论】:

【参考方案1】:

好吧,您没有显示任何代码,因此我们并不真正知道您的网站在做什么,但大概初始身份验证步骤会为该浏览器设置一个加密会话 cookie,以便该浏览器在不久的将来发出请求,服务器可以测试以查看该请求中是否存在适当的会话 cookie。如果是这样,则该浏览器已登录。这通常是“登录”在浏览器中的工作方式。

因此,isAuthenticated() 检查请求中是否存在所需的 cookie。根据代码的详细信息,某些中间件可能已经预先检查了 cookie,并在请求上设置了一个属性来指示它是否经过身份验证,isAuthenticated() 只是检查之前计算的属性。

而且,正如在the source code in the Github repository 中看到的那样,它只是检查请求中是否已经存在user 属性,这意味着某些先前的中间件已经检查了与该请求关联的cookie 并确定它代表一个有效用户。

req.isAuthenticated = function() 
  var property = 'user';
  if (this._passport && this._passport.instance) 
    property = this._passport.instance._userProperty || 'user';
  

  return (this[property]) ? true : false;
;

如需更多解释,请参阅护照代码 here 中的 cmets,因为它大致描述了事情的运作方式。

【讨论】:

真的非常感谢先生!答案的第一部分确实让我更好地了解了登录的工作原理,它消除了我对 sAuthenticated() 的困惑,我在我的 Chrome 浏览器中通过观看 Chrome 工具包中的 Cookies 部分进行了测试,同时我正在登录以及何时登录我登录它会创建您提到的encrypted session cookie,即使我清除了浏览器中的cookie,浏览器也会认为用户已注销,并且没有给我访问会员页面的权限(仅登录用户可访问)

以上是关于isAuthenticated() 如何真正起作用?的主要内容,如果未能解决你的问题,请参考以下文章

权限类 IsAuthenticated 在 DRF 中不起作用

HAVING 子句如何真正起作用?

绑定到集合是如何真正起作用的?

端口号如何在 TCP 中真正起作用?

姜戈。 Q() 如何真正起作用?

Sklearn 潜在狄利克雷分配如何真正起作用?