Twitter Oauth 回调覆盖失败

0 投票
1 回答
1118 浏览
提问于 2025-04-17 04:29

我设置了一个Twitter应用,让用户可以在我的应用里回复推文。我有一个回调网址,当我不尝试修改它时,一切都很顺利。但是现在我遇到了一个问题,我想把回调网址改成当前的地址,因为我的应用在不同的子域和服务器上运行,具体取决于开发的阶段。

当我修改回调网址后,Twitter试图把用户送回那个页面时,我看到的页面上写着“抱歉,这个页面不存在!”

而这个网址看起来像这样:

https://twitter.com/oauth/http%3A//127.0.0.1/authtwitter%3FtwitterCallback?oauth_token=VALUE&oauth_verifier=VALUE

这是我用来处理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子域名:

从这段代码来看,我不太清楚你是用的基于头部的OAuth还是基于查询字符串的OAuth。我推荐使用基于头部的OAuth——这样可以更清晰地分开不同的功能,也更容易发现问题。

确保在发送动态的oauth_callback值到oauth/request_token步骤时,它是正确进行百分比编码的。另外,确保在你的应用记录中(在dev.twitter.com/apps上)有一个占位符的HTTP回调。

撰写回答