【トークン取得編】ユーザの Google カレンダー情報を取得できる、よく見る同意画面を実装する方法
の続きの記事です。
上記でGoogleアカウントに紐づく情報を操作できるトークンを取得しました。
取得したトークンだけでは、どの Google アカウントと紐付いているかを判断できません。
複数のアカウントを管理するためにも、Google アカウントの名前やメールアドレスを取得する必要があります。
Google 認証サービスから callback で呼ばれる API で token だけでなく、Google アカウントの情報も取得し保存する形に実装を修正する。
import (
googleOAuth2 "google.golang.org/api/oauth2/v1"
)
func V2GoogleOAuthCallbackGetController(ctx *gin.Context) {
config := &oauth2.Config{
ClientID: "12345-hogefuga.apps.googleusercontent.com",
ClientSecret: "HOGE-FUGA",
Endpoint: google.Endpoint,
Scopes: []string{
// 以前の記事では記載してなかったので注意。追加対応してください。
"https://www.googleapis.com/auth/userinfo.profile",
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/calendar.calendars.readonly",
"https://www.googleapis.com/auth/calendar.calendarlist.readonly",
},
RedirectURL: "http://localhost:8000/v2/auth/google-oauth/callback",
}
// トークンの有効期限をいい感じに調整してくれるTokenSourceと共にServiceを生成
tokenSource := config.TokenSource(ctx, token)
googleOAuth2Service, _ := googleOAuth2.NewService(ctx, option.WithTokenSource(tokenSource))
// ユーザー情報取得用のサービスを生成とユーザー情報の取得
userInfoService, _ := googleOAuth2.NewUserinfoV2Service(googleOAuth2Service), nil
info, _ := userInfoService.Me.Get().Do()
// トークンとGoogleアカウントを組み合わせて保存する
save(token, info)
}
今回の実装により、Google アカウントの名前やメールアドレスを取得し、連携中のアカウント情報を明確に管理できるようになりました。
また、callback 時の state をリッチにすれば、Google アカウントでログインする機能なども提供可能になります。
次はついに Google カレンダーの情報を取得する記事を書きたいと思います。
Twitterフォロー待ってます!