2014-10-27 85 views
0

我的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; 
} 
+1

生成404錯誤消息的第二個帳戶是否可以訪問該Web應用程序?例如,如果您正在使用/ dev端點,則只有該腳本的編輯者才能訪問該webapp。 – 2014-11-10 21:36:32

回答

0

啊,就是這樣。謝謝,埃裏克!我正在開發並運行腳本,使其只能在域中訪問Web應用程序。我用來測試的第二個帳戶來自gmail。

我之所以沒有考慮過最初無法訪問網絡應用程序的gmail帳戶,是因爲我成功點擊了/exec端點,並顯示了userAuth html頁面。但是,當我點擊鏈接回到/exec時,我被顯示了404。

事後看來,這是顯而易見的,因爲我第一次碰到/exec,它是第一個訪問網絡應用程序的帳戶。第二次,我點擊/exec,這是第二個帳戶無法訪問網絡應用程序。

將應用程序腳本移出測試域,並部署了網絡應用程序以允許訪問任何人後,重定向工作正常。