Github 登录开发

title: Github登录开发 id: 4f5d47afa2466f2542fde19c84057986 tags: [] date: 2000/01/01 00:00:00 updated: 2022/12/09 13:40:03 isPublic: true --#|[分隔]|#--

Github登录开发

Github登录第三方网站的功能的开发者验证流程相对来说很简单。

登陆Github后,打开 Setting > Developer setting > OAuth applications,然后点击 Register a new application,创建一个应用程序。

创建时填写一下信息,提交后就能得到一套 clientID 和 clientSecrets。

后面可参照 官方文档 arrow-up-right来继续开发,主要流程如下。

跳转登录地址

前端跳转 github 授权登录地址:

使用 ? 和 & 的形式,带入以下参数:

姓名
描述

client_id

必填项注册arrow-up-right时从GitHub收到的客户端ID 。

redirect_uri

用户同意授权后跳转的地址,如果不则会直接跳转上一步的 Authorization callback URL 这个地址。请参阅以下有关重定向URL的arrow-up-right详细信息。

login

建议用于登录和授权应用程序的特定帐户。

scope

以空格分隔的范围arrow-up-right列表。如果未提供,则scope对于未授权该应用程序任何作用域的用户,默认为空列表。对于拥有该应用程序授权范围的用户,不会向用户显示带有范围列表的OAuth授权页面。取而代之的是,流程的这一步将自动完成用户已为应用程序授权的一组作用域。例如,如果用户已经执行了两次Web流程,并已授权一个令牌具有user范围,并且已授权另一个令牌具有repo范围,则不提供的第三个Web流程scope将接收一个具有userandrepo范围的令牌。

state

不可猜测的随机字符串。它用于防止跨站点请求伪造攻击。我用它带个字符串用作标识。

allow_signup

在OAuth流程中,是否向未认证的用户提供注册GitHub的选项。默认值为truefalse当策略禁止注册时使用。

最终,我跳转的链接形式如下:

用户授权登录

跳转地址后,用户同意授权登录,会调至指定的回调地址,同时以 ? 和 & 的形式,把用户 code 和之前传入的 state 带过来。

这个回调地址自然是我们的网站了,我们从 url 中获取 code,用接口传给后台,期望得到用户的个人信息。

注意这个 code 的有效期为10分钟,且只能使用一次。

后台拿到 code,需要做后面这两步。

通过 code 获取用户的 access_token

调用接口:

入参如下:

姓名
描述

client_id

**必需的。**您从GitHub收到的OAuth应用的客户端ID。

client_secret

**必需的。**您从GitHub收到的OAuth应用程序的客户端密码。

code

**必需的。**您收到的用户的code。

redirect_uri

授权后将用户发送到应用程序中的URL。

state

您在步骤1中提供的不可猜测的随机字符串。

请求后,会得到类似下面格式的响应:

需要对齐解析,我使用的 npm 自带工具 qs

可以得到用户的 access_token

通过用户的 access_token 获取用户个人信息

最后这就是最终步骤了,调用以下接口

需要添加两个请求头:

发送后,就能得到用户的个人信息了。

Last updated