Node.js passport如何接收个人资料?

Node.js passport如何接收个人资料?,node.js,passport.js,Node.js,Passport.js,我已经用GitHub策略实施了passport。这是我的建议。 它工作得非常好,我从GitHub收到了重定向时的用户配置文件 现在,我只是想了解这到底是如何“在引擎盖下”工作的。 我在stackoverflow上没有发现任何类似的问题,在上也没有 因此,如果我在身份验证过程中打开Chrome Developer Tools,当我单击使用GitHub登录时,似乎会出现以下情况: 调用节点路由/auth/github 节点重定向到https://github.com/login/oauth/auth

我已经用
GitHub策略实施了
passport
。这是我的建议。 它工作得非常好,我从GitHub收到了重定向时的用户配置文件

现在,我只是想了解这到底是如何“在引擎盖下”工作的。 我在stackoverflow上没有发现任何类似的问题,在上也没有

因此,如果我在身份验证过程中打开Chrome Developer Tools,当我单击使用GitHub登录时,似乎会出现以下情况:

  • 调用节点路由
    /auth/github
  • 节点重定向到
    https://github.com/login/oauth/authorize?response_type=code&redirect_uri=https%3A%2F%2Frightful-独占传输.glitch.me%2auth%2github%2callback&client\u id=ccfcc73fac8223317176
  • 用户将看到GitHub登录页面
  • 用户键入GitHub凭据并单击“登录”
  • GitHub检查凭据
  • 如果提供了有效的凭据,则会对用户进行身份验证,GitHub会重定向到已注册的回调端点,在我的例子中是:
    https://rightful-exclusive-carriage.glitch.me/auth/github/callback
  • 回调url有一个url参数,例如
    ?code=02337a951c242b9202fd
    。值得注意的是,它是一个GET方法,没有提供任何其他方法
  • 在服务器上,在
    /auth/github/callback
    -路由内调用
    passport.authenticate('github',…)
    方法
  • 当GithBubStrategy被实例化时,一个回调函数被传递给签名
    函数(accessToken、refreshToken、profile、cb)
    。以某种神奇的方式,
    accessToken
    profile
    在这里完全可用。我不明白这是怎么发生的
  • passport如何接收个人资料?
    node.js
    正在对GitHub进行服务器端调用吗?也许使用
    ?code=

    是的,这正是NodeJS所做的。这与Passport.JS或Node.JS没有任何关系。这是授权如何工作的OAuth机制

    每当身份提供商(如twitter/facebook)使用
    ?code=
    查询参数调用您的
    /callback
    时,它就会点击另一个url并获取AccessToken、RefreshToken和Idtoken(基本上是用户配置文件)

    您也可以在源代码中签出:

    在本策略和oauth策略中:

    if (req.query && req.query.code) {
        ....
        self._oauth2.getOAuthAccessToken(code, params,
            function(err, accessToken, refreshToken, params) {
        ....
        }
        ....
    }
    
    节点oauth
    包的And可以看到:

    exports.OAuth2.prototype.getOAuthAccessToken= function(code, params, callback) {
      ...
      this._request("POST", this._getAccessTokenUrl(), post_headers, post_data, null, function(error, data, response) {
        ....
      })
    }
    

    基本上,一个POST请求被发送到accessTokenUrl。

    为了澄清,引用GitHub的OAuth API Docu:Under'2。GitHub会将用户重定向回您的站点。它表示“如果用户接受您的请求,GitHub会使用代码参数中的临时代码重定向回您的站点”和“将此代码交换为访问令牌:POST”,即accessTokenUrl。”响应采用以下形式:访问令牌=E72E16C7E42F292C6912E7710C8347AE178B4A…'