我從一個Greasemonkey腳本使用一個非常簡單的GAE實例。這在過去的幾個月中運行良好,但現在路徑被添加到最終的「繼續」位置,這爲我打破了登錄過程。爲什麼Google App Engine在登錄過程中爲我的「繼續」位置追加路徑?
的基本工作流程,假設用戶登錄到谷歌自己的帳戶,但他對GAE例如令牌已超時下:
- 用戶打開網頁A安裝了通用腳本。
- 該GM運行腳本,並嘗試與GM_xmlhttpRequest訪問GAE實例()。
- 的GAE實例返回 「login_needed | <loginurl>」。 GM腳本提取loginurl並在其上設置
window.location
。 - 用戶被重定向到loginurl並最終回。然而,這一次,實際數據是由GM_xmlhttpRequest()返回。
最後一步不再起作用,因爲用戶現在重定向到loginurl 加上一些,這給目標站點404。
的GAE代碼僅僅是一半的代碼的屏幕。認證相關的代碼是這樣的:
if not users.get_current_user():
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('login_needed|'+users.create_login_url(self.request.get('uri')))
請求的順序如下,無不引起重定向:
- GET https://mygaeinstance.appspot.com/?uri=https: //targetsite.com/
- GET https://www.google.com/accounts/ServiceLogin?service=ah &被動=真&繼續= HTTPS://appengine.google.com/ _啊/ conflogin %3Fcontinue%3Dhttps://targetsite.com/ & ltmpl =克& ahname = MyGAEInstance & SIG = <一些SIG >
- GET https://appengine.google.com/ _啊/ conflogin?繼續= HTTPS%3A%2F%2Ftargetsite.com%2F & PLI = 1 & AUTH = <一些BASE64的身份驗證令牌>
- GET https://targetsite.com/ _啊/ conflogin?狀態= <一些的base64狀態>
targetsite.com不喜歡這條道路,正如你所看到的,它是不是在最初的「繼續」參數傳遞給appengine.google.com,這只是「https://targetsite.com/ 」。我做錯了什麼,我該如何解決這個問題?
您列出的所有URL均用於內部App Engine URL。它在哪裏被重定向到targetsite.com? – 2011-03-08 00:27:45
GAE中的用戶API用於在GAE網站中對用戶進行身份驗證。爲什麼你將用戶重定向到另一個網站? – olivierlemasle 2011-03-08 11:44:23
@NickJohnson:重定向回到targetsite.com是[create_login_url()](https://code.google.com/appengine/docs/python/users/functions.html#create_login_url)調用的一部分,我稱之爲'繼續',他們稱之爲'dest_url'。這是GAE在登錄完成後重定向的地方。如果我無法弄清楚爲什麼突然停止工作,我想一個解決方法是使用該參數重定向回我的GAE實例,然後使用另一個重定向將用戶重定向到targetsite.com。到目前爲止,我可以不做,節省一個請求/響應週期。 – 2011-03-08 13:12:17