iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0

昨天我們寫好OAuthLogin,並且註冊對應路由/ouath-login,有了路由後我們就能補上我們之前在Google Cloud上暫時留空的重新導向URL了。

  1. 首先到env加上RedirectURL,這邊就填上我們註冊好的/api/v1/ouath-login

    https://ithelp.ithome.com.tw/upload/images/20231001/20115990T57hwZ9a0A.png

  2. 接著我們回到Google Cloud,按到憑證找到我們當初建立的OAuth2.0用戶端

    https://ithelp.ithome.com.tw/upload/images/20231001/20115990pgpXpbalZz.png

  3. 填上與env一樣的url,這樣就能讓google知道,認證成功後要去打我們昨天寫好的OAuthLogin

    https://ithelp.ithome.com.tw/upload/images/20231001/20115990YldYREhQ1j.png

接著我們來產生google登入頁面的url,提供給使用者去google進行登入

  1. 首先我們回到callback.go,在SampleService上多加一個條件來測試,當linebot輸入login時,我們一樣透過oauth2的config,來建立URL並回傳給使用者。

    這邊要注意的是,我們透過帶入oauth2.AccessTypeOffline來讓驗證過後會取得refresh token,透過refresh token我們可以在access token過期時取得新的token,而無需再次要求使用者進行授權。

    但這只限於使用者第一次進行授權的時候才會拿的到,如果測試的時候需要再取得新的refresh token,要帶上oauth2.ApprovalForce才能夠每次都再次進行授權和讓google發新的refresh token。

    for _, event := range events {
    			if event.Type == linebot.EventTypeMessage {
    				switch message := event.Message.(type) {
    				case *linebot.TextMessage:
    					if message.Text == "login" {
    						config := &oauth2.Config{
    							ClientID:     os.Getenv("ClientID"),
    							ClientSecret: os.Getenv("ClientSecret"), // from https://console.developers.google.com/project/<your-project-id>/apiui/credential
    							Endpoint:     google.Endpoint,
    							Scopes:       []string{drive.DriveScope},
    							RedirectURL:  os.Getenv("RedirectURL"),
    						}
    						authURL := config.AuthCodeURL("state-token", oauth2.AccessTypeOffline) //oauth2.ApprovalForce
    						if _, err = app.LineBotClient.ReplyMessage(event.ReplyToken, linebot.NewTextMessage(authURL)).Do(); err != nil {
    							log.Println(err)
    						}
    						return
    					}
    					samplePK, err := app.SampleService.Sample(ctx, message.Text)
    					if err != nil {
    						log.Println(err)
    						return
    					}
    					if _, err = app.LineBotClient.ReplyMessage(event.ReplyToken, linebot.NewTextMessage(samplePK)).Do(); err != nil {
    						log.Println(err)
    					}
    				}
    			}
    		}
    
  2. 我們把程式跑起來後,可以看到linebot回覆了URL,點擊就可以進行登入囉~

    https://ithelp.ithome.com.tw/upload/images/20231001/20115990wGfJGj7WzM.png

  3. 由於我們在Google Cloud還是測試用的應用程式,所以登入後記得按旁邊的繼續

    https://ithelp.ithome.com.tw/upload/images/20231001/20115990pzx3ia6Usu.png

  4. 接著我們確認授權操作Google Drive

    https://ithelp.ithome.com.tw/upload/images/20231001/20115990A2XZpKrkOI.png

  5. 登入成功後,就可以看到OAuthLogin回傳的HTML,同時後端終端機也會印出我drive上的資料名+ID。

    https://ithelp.ithome.com.tw/upload/images/20231001/20115990I6rkBnEY7U.png

    https://ithelp.ithome.com.tw/upload/images/20231001/20115990PZ5O59CzhA.png

這樣我們現在就能確定可以透過OAuth登入google然後操作drive了,那我們明天再見囉~


上一篇
Day15 GoogleDrive API 01
下一篇
Day17 GoogleDrive API 03
系列文
Golang LineBot X GoogleDrive:LINE有各種限制!? 那就丟上Drive吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言