如何在接入Github登录的网站中获取用户的email

我的网站接入github登录,默认没有返回email,怎么才能获取用的email呢

GitHub作为OAuth提供商默认不会分享用户的电子邮件地址,除非在请求用户授权时明确指定了需要该信息。如果你想要通过GitHub登录功能来获取用户的电子邮件地址,你可以遵循以下步骤:

  1. 请求更多权限: 当你的应用请求用户授权时,你需要请求user:email这个额外的scope。这样,当用户同意授权后,你将能够访问他们的电子邮件地址。

    在构造GitHub登录URL时,你需要添加一个查询参数来请求这个权限:

    https://github.com/login/oauth/authorize?client_id=YOUR_CLIENT_ID&scope=user:email
    
  2. 获取Access Token: 用户授权后,你的应用会得到一个临时的code。使用这个code,你可以向GitHub的OAuth接口请求一个access token。这通常涉及到发送一个POST请求到https://github.com/login/oauth/access_token,包含你的客户端ID、客户端密钥以及刚才得到的code。

  3. 获取用户信息: 一旦你有了access token,就可以使用它来请求相关的GitHub API获取用户信息。你可以调用https://api.github.com/user/emails这个API来获取用户的电子邮件地址列表。

例如,你可以发起如下的HTTP请求:

GET /user/emails
Authorization: token OAUTH-TOKEN

这里的OAUTH-TOKEN是你之前获取的access token。

  1. 处理用户邮箱: GitHub可能会返回用户关联的多个电子邮件地址。这个列表中可能包括用户的主要电子邮件地址和任何已验证的电子邮件地址。通过API返回的电子邮件信息还会告诉你哪一个是用户的主要电子邮件地址,并且是否经过了验证。

请注意,即使你请求了user:email权限,最终还是取决于用户是否愿意与你的应用分享他们的电子邮件地址。如果用户选择不共享,或者他们的GitHub账户没有公开电子邮件地址,你可能无法通过这种方式获取到电子邮件。

另外,请始终留心用户隐私和数据保护规定(如GDPR),确保你的应用在合适的范围内请求用户数据,并且明确告知用户你将如何使用他们的数据。