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

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

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

【问题讨论】:

    标签: node.js express authentication passport.js


    【解决方案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,浏览器也会认为用户已注销,并且没有给我访问会员页面的权限(仅登录用户可访问)
    猜你喜欢
    • 2017-06-22
    • 1970-01-01
    • 2012-10-23
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2017-08-20
    相关资源
    最近更新 更多