首页 > 解决方案 > 如何为具有空电子邮件的用户处理 nodejs 中的 Github 身份验证?

问题描述

我有常规的身份验证流程,用户使用密码和电子邮件注册并希望添加 Github 身份验证,但我注意到如果用户不将其添加到他们的个人资料中,电子邮件字段可能会出现 null。我想知道在后端保存在 Github 注册的用户的最佳方法

标签: node.jsmongodbgithub-api

解决方案


Github 的 oAuth 文档没有列出您在获取用户代码时可以提供的范围参数。另外,您无法通过/user端点获取它,您需要发出额外的请求user/emails

  1. 要获取“代码”,首先将用户重定向到 https://github.com/login/oauth/authorize?client_id={CLIENTID}&redirect_uri={REDIRECT_URL}&scope=read:user,user:email

  2. 然后要获取访问令牌,请使用您收到的“代码”发出 POST 请求,如下所示: https://github.com/login/oauth/access_token?client_id={clientID}&client_secret={clientSecret}&code={code}

  3. 现在,当您收到访问令牌时,首先向/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


推荐阅读