搭建GitHub授权登录

  • 功能
  • 搭建

功能

实现GitHub授权,获取用户在GitHub的有关信息

搭建

  1. 注册app

在GitHub的setting->Developer Settings(开发者设置)中,点击New OAuth App(新建OAuth应用)

根据提示填写主页URL、回调URL等信息,并生成一个client_id与client_secre(客户端ID和客户端密钥。)

  1. 部署到客户端

在客户端定义一个登录按钮或链接,当用户点击时,会跳转到GitHub的登录页面。在跳转链接中,你需要包含以下参数:

  • client_id:客户端ID。
  • redirect_uri:回调url,用户登录成功后将被重定向到的URL。
  • scope:请求访问GitHub API的权限范围,如用户的公开资料、存储库访问等。
  • state:一个随机生成的字符串,用于防止跨站请求伪造攻击。
  1. 用户授权

...

  1. 获取访问令牌

在回调url时会附带一条授权码信息,拿到授权码(回调处理部署的位置就是回调url),

回调处理: 向GitHub的api发送一条POST请求来交换授权码和访问令牌。该请求需要包含以下参数:

client_id:客户端ID。 client_secret:客户端密钥。 code:重定向时收到的授权码。 redirect_uri:与之前的redirect_uri相同。

接收访问令牌:如果请求成功,GitHub将返回一个JSON响应,其中包含访问令牌。

  1. 前端vue模块示例

功能:实现授权登录

思路:

  1. 定义到GitHub授权页面,由用户进行授权

  2. 处理回调:

授权成功:发送post请求获取访问令牌

失败:处理展示失败信息

  1. 登录处理:向后端接口发起请求,携带访问令牌,由后端获取邮箱用户名等信息,在进行注册验证,验证邮箱是否注册,

如果已经注册就登录该邮箱对应的账号

如果未注册就根据邮箱生成新的账号,并登录新生成的账号

最后统一给改邮箱发送一份提醒邮件,登录提醒.


  
  
  1. 获取用户信息 应用程序可以使用访问令牌发送请求来访问GitHub API获取用户的GitHub信息,例如获取用户的个人资料、操作存储库等。

golang后端处理

type User struct {
 Login string `json:"login"`
 Email string `json:"email"`
}

//github登录操作
//获取数据
func GetUserInfo(accessToken string) (*User, error) {
 url := "https://api.github.com/user"
 req, err := http.NewRequest("GET", url, nil)
 if err != nil {
  return nil, err
 }

 req.Header.Set("Authorization""Bearer "+accessToken)

 client := &http.Client{}
 resp, err := client.Do(req)
 if err != nil {
  return nil, err
 }
 defer resp.Body.Close()

 body, err := ioutil.ReadAll(resp.Body)
 if err != nil {
  return nil, err
 }

 user := &User{}
 err = json.Unmarshal(body, user)
 if err != nil {
  return nil, err
 }

 return user, nil
}

//后续处理
//后续就是MySQL和redis的增删改查操作
//....

本文由 mdnice 多平台发布

你可能感兴趣的:(后端)