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() 如何真正起作用?的主要内容,如果未能解决你的问题,请参考以下文章