Twitter Oauth回调覆盖失败

时间:2011-10-17 18:11:28

标签: python twitter oauth twitter-oauth

所以我设置了一个Twitter应用程序,以便人们可以回复我自己的应用程序内的推文。我有一个回调网址,当我不尝试覆盖它时,一切似乎都没问题。但是现在我遇到了一个问题,即使用回调覆盖工作,应用程序可以在多个子域和服务器上运行,具体取决于它所处的开发阶段,并且我想覆盖当前URL的回调。

当我覆盖回调并且Twitter尝试将用户发送回该页面时,我会进入一个页面,上面写着“抱歉,该页面不存在!”

,URL看起来像这样

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 个答案:

答案 0 :(得分:4)

很少有事情......

您的网址已过时且过时,其功能与正确的网址不同。使用SSL和api子域:

我不清楚在查看此代码时,您是在执行基于标头的OAuth还是基于查询字符串的OAuth。我推荐基于标题的OAuth - 它可以极大地区分关注点,并在发生错误时更容易发现错误。

确保将动态oauth_callback值发送到oauth / request_token步骤时,它正确地进行了百分比编码。另外,请确保dev.twitter.com/apps上的应用程序记录中有基于HTTP的占位符回调