html appengine 重定向 URL

1 投票
3 回答
1395 浏览
提问于 2025-04-16 14:28

我想在用户在一个第三方网页上完成身份验证后,把他们重定向到下一个网址。在这个重定向的网址中,我希望包含一些关于用户的信息,比如会话ID。例如,我的重定向网址会是 www.z.appspot.com/?session=x/。当用户返回到我的页面时,我想从这个新网址中提取一些他们的详细信息,比如 www.z.appspot.com/?access_code=x/?token=y&user_id=u。但是在尝试提取这些信息时,系统无法识别网址中的token,因为它把这个token当成了会话的一部分。我试着用 & 来分隔,但还是没有成功。

3 个回答

1

你需要一个叫做 cgi 的模块,还有一个叫做 FieldStorage 的函数。可以这样做:

import cgi

url_parms = cgi.FieldStorage()
session = url_parms.getvalue("session","default")

你可以对任何 URL 参数这样操作。把“default”替换成你想要的默认值(比如一个空字符串)。

1

你的问题有点让人困惑,不过有没有什么原因让你的其他服务无法重定向到:www.z.appspot.com/?access_code=x/&token=y&user_id=u?这个链接应该可以被正确解析:

import urlparse
import cgi

url = "www.z.appspot.com/?access_code=x/&token=y&user_id=u"
query = urlparse.urlparse(url).query
print cgi.parse_qs(query)
# output: {'access_code': ['x/'], 'token': ['y'], 'user_id': ['u']}

如果你不能改变这个网址的格式,你可以尝试这样做:

import urlparse
import cgi

url = "www.z.appspot.com/?access_code=x/?token=y&user_id=u"
query = urlparse.urlparse(url).query
access_code, query = query.split('?', 1)
access_code = access_code.split('=', 1)[1]
print access_code
# output: 'x/'
print cgi.parse_qs(query)
# output: {'token': ['y'], 'user_id': ['u']}

或者,如果你只是想知道如何在重定向到的网址中嵌入参数,可以看看Python的urlencode

更新

import urllib
encoded = urllib.urlencode({'app_id': 11,
                            'next': 'http://localhost:8086/?access_tok­en=%s' % (access_token,)})
hunch_url = 'http://hunch.com/authorize/v1/?%s' % (encoded,)

然后把hunch_url传递给你的模板。

0

看起来你要跳转的服务在处理继续链接中的查询参数时出了点问题。解决这个问题最简单的方法就是(就像我在你最初的问题中提到的)把参数放在路径里,而不是放在查询字符串中。也就是说,使用这样的链接格式:

http://www.yourapp.com/continue/1234

这里的 1234 是用户的会话ID或者用户ID。

撰写回答