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…'