Go语言实现第三方登录Github (通过OAuth2.0)

导言

  1. 关于 OAuth2.0 是什么,可以参考阮一峰老师的文章 — OAuth 2.0 的一个简单解释
  2. 以下将使用 Go 语言,通过 OAuth2.0 ,达到第三方登录Github的目的。并在登录成功后,展示用户 Github 的信息。
  3. 最终源码参考: Go语言第三方登录Github

原理

第三方网站登录 Github 的原理如下:

  1. 用户在第三方网站点击 Github授权登录 后,浏览器跳转到 Github 登录页面。
  2. 用户在 Github 登录成功后,浏览器重定向回第三方网站。此时浏览器会携带一个 code
  3. 第三方网站服务器通过 codeGithub 索取 token
  4. Github 返回 token
  5. 第三方网站服务器收到 token 后,就可以通过 token 获取用户信息了。

不懂也没关系,下面将循序渐进的进行实现。


实战

登记阶段

第三方网站要登录 Github 必须进行登记。访问这个网址,可以进行登记。
在这里插入图片描述
上面的 Authorization callback URL 就是 用户在 Github 登录成功后重定向回的 url

登记成功后,可以看到以下信息:
在这里插入图片描述
Github 会通过识别这些信息,判断第三方网站能否进行合法登录。

在编写代码阶段,我会把这些信息放在一个结构体Conf 中。

结构体代码如下:

type Conf struct {
    
	ClientId     string		// 对应: Client ID
	ClientSecret string		// 对应: Client Secret
	RedirectUrl  string		// 对应: Authorization callback URL
}```

接下来,我们进行代码编写。


页面展示

前端代码如下:
views/hello.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a href="https://github.com/login/oauth/authorize?client_id={
    {.ClientId}}&redirect_uri={
    {.RedirectUrl}}">Github 第三方授权登录</a>
</body>
</html>

上面的 ClientIdRedirectUrl 将在后续传入。

后端代码如下:
main.go

package main

type Conf struct {
   
	ClientId     string
	ClientSecret string
	RedirectUrl  string
}

var conf = Conf{
   
	ClientId:     "7e5fe351bc9b131c6f2a",
	ClientSecret: "9fd22c13ae790685c59e3fb4a9b444b75b506a5b",
	RedirectUrl:  "http://localhost:9090/oauth/redirect",
}

func Hello(w http.ResponseWriter, r *http.Request) {
   
	// 解析指定文件生成模板对象
	var temp *template.Template
	var err error
	if temp, err = template.ParseFiles(
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值