我从一个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