2011-10-17 72 views
0

因此,我設置了一個twitter應用程序,以便人們可以回覆我自己的應用程序中的推文。我有一個回調URL,當我不嘗試重寫它時,一切似乎都很順利。然而,現在我有一個問題得到的回調覆蓋工作的應用程序運行在多個子域和服務器基於它是在什麼樣的階段的發展,我想覆蓋回調到當前的網址。Twitter Oauth回調覆蓋失敗

當我重寫回調和嘰嘰喳喳嘗試發送用戶回到該頁面我到一個頁面,說:「對不起,該頁面不存在!」

和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)) 

電流授權URL

命中允許在Twitter上

Twitter的訪問顯示:重定向你回到應用程序

不能與像上面的例子網址查找頁面。

+0

我不認爲Twitter可以覆蓋回調URL。也就是說,你不應該得到404。這是授權完成後發生的? – muffinista

+0

他們允許它http://milindshakya.tumblr.com/post/4208580364/overriding-twitters-default-callback-url-using-oauth與Twitter員工談論它,但線程已過時。如果您在請求中使用POST,它應該可以工作。 – BillPull

回答

3

幾個簡單的事情......

您的網址是陳舊過時和不作爲以及正確的網址。使用SSL和API子域:

目前還不清楚,我看這個代碼,無論您是進行基於頭的OAuth的或基於查詢字符串-的OAuth 。我建議使用基於頭的OAuth - 它可以顯着分離問題,並在發生錯誤時更容易發現問題。

確保當您將動態oauth_callback值發送到oauth/request_token步驟時,它的百分比編碼正確。此外,請確保您的應用程序記錄上有一個佔位符基於HTTP的回調dev.twitter.com/apps

+0

謝謝!你能把我和一個例子聯繫起來,或者提供一個區別基於標題的Oauth的例子。 – BillPull