node.js - 如何为具有空电子邮件的用户处理 nodejs 中的 Github 身份验证?
问题描述
我有常规的身份验证流程,用户使用密码和电子邮件注册并希望添加 Github 身份验证,但我注意到如果用户不将其添加到他们的个人资料中,电子邮件字段可能会出现 null。我想知道在后端保存在 Github 注册的用户的最佳方法
解决方案
Github 的 oAuth 文档没有列出您在获取用户代码时可以提供的范围参数。另外,您无法通过/user
端点获取它,您需要发出额外的请求user/emails
要获取“代码”,首先将用户重定向到
https://github.com/login/oauth/authorize?client_id={CLIENTID}&redirect_uri={REDIRECT_URL}&scope=read:user,user:email
然后要获取访问令牌,请使用您收到的“代码”发出 POST 请求,如下所示:
https://github.com/login/oauth/access_token?client_id={clientID}&client_secret={clientSecret}&code={code}
现在,当您收到访问令牌时,首先向
/user
端点发出请求,然后再向端点发出请求/user/emails
。确保在带有参数的标头中传递访问令牌Authorization: "token {accessToken}"
要获取基本用户数据,请向此 url 发出 GET 请求:
https://api.github.com/user
然后要获取用户电子邮件,请发出 GET 请求https://api.github.com/user/emails
您可能会在结果中收到多封电子邮件。结果将如下所示:
[
{
email: 'johndoe100@gmail.com',
primary: true,
verified: true,
visibility: 'public'
},
{
email: 'johndoe111@domain.com',
primary: false,
verified: true,
visibility: null
}
]
您可以选择primary
参数设置为的那个true
。
推荐阅读
- typescript - 对如何访问 TreeDataProvider 感到困惑
- r - stat_summary:使用单独数据框的箱线图的事后标签
- https - 如何在 Apache HTTPS 代理后面配置 Pyramid 应用程序
- azure - 我们什么时候会在 CosmosDB 模拟器上看到 Gremlin 支持?
- javascript - 用户 ID 语法的输入字段上的正则表达式
- git - 是否可以禁止提交消息编辑
- scala - 为什么我得到 Set[Char] 而不是 Set[String]?
- azure-devops - 让 VSTS 代理每次都使用相同的“工作目录”?
- javascript - TypeError:无法读取 Android 中未定义 Firebase 的属性“val”
- c++ - ')' 标记之前的预期主表达式(需要“模板”消歧器)