前幾篇關於GAS的文章裡面有提到
我的個人Google帳號所創建的script
在執行的時候會直接被google封鎖
而不是出現一般在網路上常看見的:因為程式未經認證,跳出一個警告視窗,但仍可以用進階選項的方式來執行
那時候有猜測是不是因為我使用GCP(Google Clould Platform)的關係
在這之前,從網路上搜尋很久都沒找到解決方案
或者是用英文關鍵字查詢,因為都是英文,也沒辦法很仔細去尋找跟細看內容
都是找到類似的問題,但是並沒有解決方法
後來,也曾經詢問google客服
客服說這不是他們的服務項目,仍然幫我找了很多資料,之後還會詢問問題是否解決了
最後還提供了google IssueTracker讓我上去發問,看看google內部人員能不能幫忙回答
只是這個就要用英文了,所以用很破的英文+google翻譯來描述問題
” Google apps script – Authorization Required. But I don’t get an option for the advanced window.”
後來有一個人一直詢問細節,要我提供更詳細的說明
我也嘗試不斷說明,跟截圖
在我打算直接錄影demo流程的時候
有別的人回覆說這個已經是很久的問題,只是google沒有去修正
貼了另一個IssueTracker的文章說#76的回應內容可以解決
我看了其他回應,在#145提了3個方式,其中1)就是#76的方法
在#150有提到#145方法1)的詳細步驟
Here’s what I did in detail:
- Go to https://console.cloud.google.com/cloud-resource-manager and click + CREATE PROJECT
- Set project name and click CREATE. Wait for it to be created.
- Click on the ☰ menu button upper left >> APIs & Services >> OAuth consent screen
- Make sure that your new project is selected upper left to the right of Google Cloud Platform
- I chose External (I’m not a Google Workspace (formerly G Suite) user thus Internal was not an option for me or I would have used that) and click CREATE
- Fill in App name, User support email and Email address under Developer contact information and click SAVE AND CONTINUE
- On the Scopes section just click SAVE AND CONTINUE and on the Option Info section click SAVE AND CONTINUE
- Click on the ☰ menu button upper left >> Home >> Dashboard and copy the Project number under Project info to your clipboard
- Go to your google script code editor and click on the Resources menu >> Cloud Platform project…. My project was the one created by google for the script and said This script has an Apps Script–managed Cloud Platform project.
- Paste the Project number in the Enter Project Number here box and click Set Project
簡單的說:就是將GAS專案連結至自己的GCP專案,而不是用預設的GCP專案
原理是GAS也是利用GCP方式來管理,如果預設的GCP專案不能用,就必須轉換到自己的GCP專案
其實這個方法我試過,看到有其他人回應說可以解決
所以我還是嘗試照說明操作,看看有哪些細節沒注意,或者功能用錯
結果還是不行,不過出現的錯誤是授權失敗,而不是被擋掉
我嘗試連結其他GCP專案(網站的幾個外掛有使用到google API功能),結果竟然可以運作!!
於是比較這兩個GCP專案的OAuth設定有什麼不同
發現就是差在新增的GCP OAuth 發布狀態是”測試中”
將新增的GCP OAuth 改成”實際運作中”之後
原來直接被封鎖的情況,變成出現說明程式”未經驗證”,有”進階”的選項可以繼續執行
因此,GAS程式都能執行了
只是有個讓我困惑的地方是
後來再將OAuth轉換成”測試中”,程式仍然可以執行……
差別在於授權畫面會說明這個程式是在”測試中”
不過還是可以按”繼續”的選項來執行
搞不懂~~反正現在看起來是可以運作了
總結一下,其實就只有4個步驟
- 1.創建GCP專案
- 2.設定OAuth
- 3.啟動OAuth(啟動過一次,再改回”測試中”似乎也能正常運作)
- 4.將GAS專案連結至GCP專案
之後新的GAS專案只要進行第4個步驟就可以了
實在不簡單,終於可以解決這個懸宕已久的問題
紀錄之!!
後記:
在GCP的APIs & Services裡面有”憑證”
有些程式執行會自動產生憑證,這些憑證是不能刪除,
假如刪除,程式就會因為無法取得授權而無法運作
因為這無法手動增加,解決的方式就是重新連結GCP專案
又因為沒有重新連結的選項,
所以要先連結別的GCP專案之後,再重新連結回來