使用Golang和OAuth2.0与Google一起创造她
目的
我是一个业余的大叔,但我学会了如何使用golang和Google的OAuth2.0来获取用户信息。
文化、社会或环境条件相应的事物。
-
- Google提供のLibraryをちゃんと使いたい
Libraryちゃんと使ったサンプルがあまり見当たらず
説明を省略しないで動くソースを示してほしい
公式サイトも途中で「以下省略」
作为一名业余者的我迷失了方向… 经过一番试验和错误,总算完成了,现在我将介绍一下整个过程。
事前需要做的事情
图书馆
获取Google API的库
go get -u google.golang.org/api/oauth2/v2
谷歌开发者控制台 zhě
从Google开发者控制台获取API的凭据
https://console.developers.google.com/apis/
在Credentials的授权重定向URL中,注册用于此事的重定向URL http://localhost:5001/loginr。
提供中文资料
将这样的孩子引进
import (
"net/http"
"log"
"fmt"
"context"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
oauthapi "google.golang.org/api/oauth2/v2"
)
首先是登录页面
我会制作一个可以从你的页面跳转到Google登录页面的URL。
var conf = &oauth2.Config{
ClientID: "Your Client ID", //あなたのやつ
ClientSecret: "Your Client Secret", //あなたのやつ
Scopes: []string{oauthapi.UserinfoEmailScope},
Endpoint: google.Endpoint,
RedirectURL : "http://localhost:5001/loginr",
}
//URLを作れるよ。 yourStateUUIDは本来はCSRF対策用UUIDを入れる。
conf.AuthCodeURL("yourStateUUID", oauth2.AccessTypeOffline)
如果把这个URL放在任意的标签中,就可以跳转到Google的登录页面。
大概应该会生成这样的URL:
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=你的客户端ID&redirect_uri=http%3A%2F%2Flocalhost%3A5001%2Floginr&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&state=你的状态UUIDroot@233cc47a021e
重定向页面
Google在验证之后,会使用带有访问代码的重定向方式将您重定向到您指定的网站(重定向URL)。
服务器端会读取该访问代码,并与Google连接以获取用户信息。
func LoginRHandler(w http.ResponseWriter, r *http.Request) {
//パラメータからアクセスコードを読み取り
code := r.URL.Query()["code"]
if code == nil || len(code) == 0 {
fmt.Fprint(w,"Invalid Parameter")
}
//いろいろライブラリが頑張って
ctx := context.Background()
tok, err := conf.Exchange(ctx, code[0])
if err != nil {
fmt.Fprintf(w,"OAuth Error:%v", err)
}
//APIクライアントができて
client := conf.Client(ctx, tok)
//Userinfo APIをGetしてDoして
svr, err := oauthapi.New(client)
ui, err := svr.Userinfo.Get().Do()
if err != nil {
fmt.Fprintf(w,"OAuth Error:%v", err)
} else {
//メールアドレス取得!
fmt.Fprintf(w, "Your are logined as : %s", ui.Email)
}
}
我认为可以以相同的方式调用各种谷歌 API,进行获取并执行。
最终
所有源代码在这里https://play.golang.org/p/ghQ0_5bdBQ4
抱歉
写这篇文章的是一个对现代文明不太熟悉的叔叔。
在我年轻的时候,打孔卡片是主流,所以我对键盘和电脑都不是很熟悉。如果有任何错误或疏漏,请多多包涵并温柔地指正,我将不胜感激。