Twitter Oauth 回调覆盖失败
我设置了一个Twitter应用,让用户可以在我的应用里回复推文。我有一个回调网址,当我不尝试修改它时,一切都很顺利。但是现在我遇到了一个问题,我想把回调网址改成当前的地址,因为我的应用在不同的子域和服务器上运行,具体取决于开发的阶段。
当我修改回调网址后,Twitter试图把用户送回那个页面时,我看到的页面上写着“抱歉,这个页面不存在!”
而这个网址看起来像这样:
这是我用来处理OAuth的Python代码,使用了这个库:https://github.com/simplegeo/python-oauth2
#SETUP TWITTER AUTHORIZATION OBJECT
request_token_url = 'http://twitter.com/oauth/request_token'
access_token_url = 'http://twitter.com/oauth/access_token'
authorize_url = 'http://twitter.com/oauth/authenticate'
consumer = oauth.Consumer(consumer_key, consumer_secret)
client = oauth.Client(consumer)
#get request token
callbackURL = urllib.quote("%s?twitterCallback" % self.request.url)
resp, content = client.request(request_token_url, "POST", body=urllib.urlencode({'oauth_callback':callbackURL}))
if resp['status'] != '200':
raise Exception("Invalid Response %s." %resp['status'])
request_token = dict(urlparse.parse_qsl(content))
tmpldict['callbackURL'] = callbackURL
tmpldict['oauth_token'] = request_token['oauth_token']
tmpldict['twitauthurl'] = "%s?oauth_token=%s" % ( authorize_url, request_token['oauth_token'] )
qargs=urlparse_qs(self.request.url,True,False)
if 'oauth_verifier' in qargs:
oauth_verifier = qargs['oauth_verifier'][0]
else:
oauth_verifier = None
if oauth_verifier:
token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret'])
token.set_verifier(oauth_verifier)
client = oauth.Client(consumer,token)
resp, content = client.request(access_token_url, "GET")
access_token = dict(urlparse.parse_qsl(content))
用户的当前流程:
点击授权网址
在Twitter上点击允许访问
Twitter显示:正在将您重定向回应用
找不到像上面例子那样的网址的页面。
1 个回答
4
几点小建议...
你的网址有点老旧,功能也不如新的网址好用。建议使用SSL和api子域名:
- https://api.twitter.com/oauth/request_token
- https://api.twitter.com/oauth/authorize
- https://api.twitter.com/oauth/access_token
从这段代码来看,我不太清楚你是用的基于头部的OAuth还是基于查询字符串的OAuth。我推荐使用基于头部的OAuth——这样可以更清晰地分开不同的功能,也更容易发现问题。
确保在发送动态的oauth_callback值到oauth/request_token步骤时,它是正确进行百分比编码的。另外,确保在你的应用记录中(在dev.twitter.com/apps上)有一个占位符的HTTP回调。