我的Google Docs插件在用戶同時登錄到多個Google帳戶的Web應用程序中運行時出現問題,然後當他們嘗試使用第三方應用程序的訪問令牌將保存到錯誤的Google帳戶中。Google Apps腳本:未找到端點
我的想法是通過在狀態參數中傳遞授權用戶的電子郵件來檢查當前用戶的電子郵件,然後重新構建重定向URL以包含具有正確帳戶電子郵件的authuser參數,然後重定向到那個終點。不過,我在創建實際可用的新重定向網址時遇到了問題。
我經常使用的OAuth重定向將我帶回/exec
端點的腳本。在我的doGet()
裏面,我正在檢查狀態參數是否等於Session.getActiveUser().getEmail()
的值。如果不是,那麼我會構建一個指向我的/exec
端點的新重定向URL,除了我還會添加一個authuser參數以及一個redir參數,該參數告訴該應用程序在下次通過doGet()
時不嘗試並建立新的重定向。然後,我輸出一個名爲userAuth的HTML頁面。 userAuth頁面包含一個用戶點擊使用包含authuser的新重定向的鏈接。問題是,當你點擊這個鏈接時,你會看到一個「對不起,你請求的文件不存在」。錯誤信息。
我的/exec
端點發生了什麼事,使得它在第二次嘗試請求時不存在?有更好的方法我應該去做這件事嗎?
更新:我發現我的/exec
端點沒有發現只要我送從一個目前正在與谷歌不同的授權的authuser
參數值。我誤解了authuser
參數的作用嗎?我認爲,既然用戶登錄了兩個Google帳戶,則authuser
會指定哪個帳戶使用該附加組件。我的doGet()
代碼如下。謝謝你的幫助!
function doGet(request) {
var HTMLToOutput;
if (request.parameters.state != Session.getActiveUser().getEmail() &&
!request.parameters.redir) {
var authuser = request.parameters.state;
var newRedir = AUTH_REDIRECT_URI;
newRedir = newRedir + "?code="+ request.parameters.code + "&redir=true&authuser="
+ authuser;
setPrivateCache('newRedir', newRedir);
HTMLToOutput = HtmlService.createHtmlOutputFromFile("userAuth");
} else if (request.parameters.code) {
HTMLToOutput = upgradeAuthCode(request.parameters.code + "");
} else if (request.parameters.error == 'access_denied') {
HTMLToOutput = HtmlService.createHtmlOutputFromFile("accessDenied");
}
return HTMLToOutput;
}
生成404錯誤消息的第二個帳戶是否可以訪問該Web應用程序?例如,如果您正在使用/ dev端點,則只有該腳本的編輯者才能訪問該webapp。 – 2014-11-10 21:36:32