2011-10-16 105 views
1

我在請求標題中設置了oauth_callback URL,當我在Twitter中這樣做時,它工作正常,用戶被重定向到回調URL。但是使用Tumblr的API,回調URL被忽略,用戶被重定向到默認的URL。有沒有人經歷過這個?除了我應該設置的標題外,還有別的地方嗎?我嘗試將它作爲參數傳遞,但那也沒有效果。Tumblr OAuth回調URL

任何幫助,將不勝感激。

回答

1

如果您嘗試在回調網址中嵌入用戶標識,那麼這篇文章可以幫助您。
您可以將oauth標記保存在會話中,稍後在回調中可以從會話中檢索用戶。

令牌要求:

def ask_access 
    tumblr_consumer = get_consumer 
    if tumblr_consumer 
    #1. get a request token 
    request_token = tumblr_consumer.get_request_token 
    session[:request_token] = request_token 
    session[:user_token] = "#{request_token.params[:oauth_token]}_#{current_user.id}" 
    #2. have the user authorize 
    redirect_to request_token.authorize_url 
    else 
    render :text=> "Failed to acquire request token from Tumblr." 
    end 
end 

的回調:

def call_back 
    if params[:oauth_token] && params[:oauth_verifier] 
    request_token = session[:request_token] 
    user_id = session[:user_token].split("_")[1] 
    user = UserProfile.find user_id 
    ##3. get an access token 
    access_token = request_token.get_access_token({:oauth_verifier => params[:oauth_verifier]}) 
    user.tumblr_token = access_token.params[:oauth_token] 
    user.tumblr_secret = access_token.params[:oauth_token_secret] 
    user.save! 
    end 
end 
+0

謝謝,因爲Tumblr不允許請求頭中的回調url,所以這是唯一的解決方案。對不起,很晚才接受:) – Rush

2

Tumblr爲此做了這些(我假設)。他們要求在應用程序註冊時定義回調URL,並且在實現過程中不會讓它重寫。

安全問題是確保沒有人可以竊取您的應用程序令牌並嘗試使用它來使用您的聲譽來訪問客戶的數據。通過強制所有回調轉到默認URL,他們可以保證只有您的應用程序能夠獲得訪問令牌。

的兩種方式來處理這個問題是:

1)有做基於Cookie或其他一些數據 2)重定向到你想要去的,已針對不同的回調網址,不同的應用令牌的默認網址。

5

根據Tumblr's developer blog,這是的tumblr的API中的錯誤,並已得到修復。

你們中許多人已經感到沮喪,你不能覆蓋 回調URL當用戶試圖將授權其 應用。好消息:我們修補了造成這個問題的錯誤。

現在,您可以傳遞一個帶有oauth_callback參數的url,一旦完成,我們將 重定向到該端點。

讓我們來看一個簡單的例子。

當用戶呈現畫面授權您的應用程序,你 應該能夠在URL中 oauth_callback參數替代默認的回調。

http://www.tumblr.com/oauth/authorize?oauth_token=your_token&oauth_callback=http%3A%2F%2Fmysite.com/oauth_callback/testing 上面的網址將用戶重定向到 mysite.com/oauth_callback/testing,讓你知道,如果用戶有 批准或拒絕您的應用程序。

更新2013年3月14日

從今天開始,的tumblr不再尊重oauth_callback參數。我之前鏈接到的博客文章已被刪除。我最終使用了接受的答案的變體來解決它。

+0

你是如何設法解決它的? – Jhn

-1

Tumblr實現了與Twitter不同的這種行爲,因此Ruby OAuth庫的相同用法會產生不同的結果。

爲了您@callback_url的價值,這個作品在Twitter上:

@request_token = @oauth.get_request_token({ 
    oauth_callback:@callback_url 
    }) 
    redirect_to @request_token.authorize_url 

但對於的tumblr,你將被重定向到您的默認網址。要指定一個不同的URL,你應該這樣做:

@request_token = @oauth.get_request_token 
redirect_to @request_token.authorize_url + '&' + { oauth_callback:@callback_url }.to_query 

這是他們的文檔/博客文章(在另一個答案引用)是一致的。根據OAuth 1.0a規範,我沒有檢查過它是否「正確」。

2

我無法迴應Jonathan Tran的回答,因爲我的帳戶很年輕,但在授權URL中發佈回調URL不再有效,正如他所說的。我問在Twitter上,這裏是約翰鵐的回答是:

https://twitter.com/codingjester/status/313248230987157505

我成功地能夠使用以下(在Python這裏)重新路由我的回調URL,分配所有適當的鍵後:

consumer = oauth.Consumer(consumer_key, consumer_secret) 
client = oauth.Client(consumer) 
resp, content = client.request(request_token_url, "GET") 
resp, content = client.request(request_token_url, "POST", body=urllib.urlencode({"oauth_callback": "[your own URL here]"}))