GAS 雲端硬碟權限錯誤

失敗: Exception: You do not have permission to call DriveApp.getFolderById. Required permissions: (https://www.googleapis.com/auth/drive.readonly || https://www.googleapis.com/auth/drive). For more information, see https://developers.google.com/apps-script/guides/support/troubleshooting#authorization-is

這個錯誤表示你的 Google Apps Script 程式碼想要存取雲端硬碟的資料夾,但目前該腳本還沒有獲得對應的權限。

解決方法

最直接的方式是在腳本編輯器中手動觸發授權視窗。你可以試著隨便修改一下程式碼,例如加個空格再刪掉,然後存檔並按下執行鈕。系統通常會跳出一個視窗,要求你審核權限。這時候請點選你的帳號,並在安全警告頁面選擇進階,最後點擊前往專案並允許存取。

檢查資訊清單檔

如果手動執行沒有跳出視窗,可能需要檢查 appsscript.json 這個檔案。在編輯器的設定中,勾選在編輯器中顯示 appsscript.json 資訊清單檔。打開該檔案後,確認 oauthScopes 欄位是否包含 https://www.googleapis.com/auth/drive 這個項目。如果沒有,你可以手動加上去,這樣腳本就會知道它需要哪些權限。

程式碼範例

在程式碼的最上方加上註解,有時候也能幫助編輯器辨識需要的權限。

/**
 * @OnlyCurrentDoc
 * 如果你只需要存取這份檔案相關的資料,可以用上面這個標籤。
 * 但因為你用了 getFolderById,通常需要完整的雲端硬碟權限。
 */

function myFunction() {
  var folder = DriveApp.getFolderById('你的資料夾ID');
  // 其餘程式碼
}

你需要確認執行這個腳本的人,對該資料夾確實擁有存取權限。如果資料夾是別人的,而你只有檢視權限,有時候也會導致權限驗證失敗。


失敗: Exception: You do not have permission to call DriveApp.Folder.createFile. Required permissions: https://www.googleapis.com/auth/drive. For more information, see https://developers.google.com/apps-script/guides/support/troubleshooting#authorization-is

這個錯誤說明你的腳本想要在資料夾內建立檔案,但它只有讀取權限或完全沒有寫入權限。

權限層級問題

你之前遇到的錯誤是關於讀取,現在則是關於寫入。建立檔案需要 https://www.googleapis.com/auth/drive 這個權限。即便你的 HTML 網頁設定為所有人皆可存取,這只代表外部使用者可以看到網頁,並不代表你的腳本自動獲得了操作雲端硬碟的權力。

資料夾共享設定

如果你的腳本是以你的身分執行,那麼你必須對目標資料夾擁有編輯權限。如果這個資料夾不是你建立的,請確認原擁有者已經將你加入並設定為編輯者。

如果這個腳本是透過 Web App 形式發布,且設定為以存取使用者的身分執行,那麼每個使用這個網頁的人,都必須對該資料夾擁有寫入權限。

強制更新權限

有時候編輯器不會自動偵測到權限變更。你可以嘗試在程式碼中加入一行暫時性的程式碼:

// 執行一次這行,強制觸發完整權限請求
DriveApp.getRootFolder();

儲存後手動點擊執行,這會迫使 Google 重新跳出授權視窗,要求你同意完整的雲端硬碟存取權。

檢查專案設定

進入腳本編輯器的設定頁面,確認是否勾選了在編輯器中顯示 appsscript.json 資訊清單檔。打開該檔案,檢查 oauthScopes 陣列中是否包含正確的網址。

"oauthScopes": [
  "https://www.googleapis.com/auth/drive"
]

如果裡面只有 drive.readonly,請手動改成上面那樣,或是直接刪除該陣列讓系統重新自動偵測。


請問你這個腳本是發布成 Web App 供他人使用,還是只有你自己在使用?

既然是發布給他人使用的 Web App,處理權限的方式會根據你的發布設定而有很大不同。

執行身分設定

你在發布 Web App 時,會有一個身分選項:

如果你選「我 (Me)」,那麼腳本會用你的帳號權限去操作雲端硬碟。這時你不需要開啟資料夾的共享權限給所有人,只要你自己有權限就好。但你必須在發布前,先在編輯器手動執行一次函數,完成授權流程。

如果你選「存取網頁的使用者 (User accessing the web app)」,那麼每個開啟網頁的人都必須登入 Google 帳號,且他們自己的帳號必須對該資料夾擁有編輯權限。這種情況下,你就必須將雲端硬碟資料夾設定為「知道連結的所有人皆可編輯」,或者將這些人加為編輯者。

解決錯誤的步驟

  1. 進入腳本編輯器,手動執行一次包含 createFile 的函數。
  2. 即使你是開發者,系統也會彈出授權視窗,請務必點擊允許。
  3. 重新部署 (Deploy) 你的 Web App,選擇「新版本」,確保權限變更生效。

建議做法

通常為了方便他人使用,建議將執行身分設為「我 (Me)」,並將存取權限設為「任何人 (Anyone)」。這樣別人不需要登入或擁有資料夾權限也能透過你的網頁上傳檔案,權限會由你的帳號統一承擔。

如果你已經設定為「我」,但還是報錯,通常是因為你修改程式碼後沒有重新進行「管理部署」並切換到新版本。請確保你使用的是最新部署的連結。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *