2011-04-15 59 views
8

我收到使用OmniAuth令牌/從服務祕密,並可以將其存儲的用戶,但我堅持就如何實際使用這些來調用服務。如何使用omniauth對服務進行認證調用?

我已經看到了這個問題最接近的事是here但這樣他解決,有感覺不對。如果你知道你在做什麼,我覺得OmniAuth可能會爲你做這一切。

Netflix有一個很好的auth process,所以我希望通過使用OmniAuth從所有這些中抽象出所有這一切。

假設我有一個用戶,如何在調用諸如Netflix的服務中使用這些令牌和祕密?

非常感謝:)

回答

19

嘿,我是OmniAuth寶石的作者。 OmniAuth旨在用於身份驗證過程。對於像Netflix這樣的OAuth提供商來說,這意味着將訪問令牌交換爲訪問令牌,然後用該訪問令牌從API中提取用戶信息。這些一次性呼叫是專門爲每個提供商設計的,並且是而不是,意味着它是給定提供商的通用API客戶端。

你可以做什麼用它來OmniAuth獲得憑據,然後使用該網站本身另一特定庫(如ruby-netflix或其他任何東西,我不知道最好的是什麼)撥打電話。您可以通過訪問env['omniauth.auth']['credentials']來檢索通過認證舞蹈獲得的訪問令牌和祕密,然後使用這些來初始化API客戶端。

您也可以直接使用OAuth庫進行這些調用,但我強烈建議只使用現有的庫,它會更快更輕鬆。所有這些都有意義嗎?

+0

你爲什麼建議不要使用OAuth寶石。簡單? – deepak 2011-11-22 12:05:08

7

OmniAuth是關於認證的全部內容;你應該看看另一個用於實際調用服務的gem。例如,對於Facebook,我使用的OAuth2寶石和代碼如下所示:

module Facebook 
    class Client < OAuth2::Client 
    # Return a new OAuth2::Client object specific to the app. 
    def initialize 
     super(
     APP_CONFIG[:facebook][:api_key], 
     APP_CONFIG[:facebook][:app_secret], 
     :site => 'https://graph.facebook.com', 
     :parse_json => true 
    ) 
    end 
    end 

    class Token < OAuth2::AccessToken 
    # Return a new OAuth2::AccessToken specific to the app 
    # and the user with the given token. 
    def initialize(token) 
     super(
     Facebook::Client.new, 
     token 
    ) 
    end 
    end 
end 

access_token = Facebook::Token.new(users_fb_token) 
url   = "https://graph.facebook.com/#{user_fb_id}/feed" 
response  = access_token.post(url, :message => "My update") 

注意,有流行的服務,如Facebook和Twitter的寶石,可以管理如創建令牌幕後的東西,管理URL等等對於Netflix來說,你可以檢查以下內容:

而且記住,OmniAuth業務數據直接返回給你;你可以自由地存儲和使用它(你會怎麼樣)(Devise有自己的OmniAuth模式,如果你試圖超出範圍,你可能會碰到這種模式)。你鏈接的另一個問題看起來不太過分。

+0

感謝您抽出寶貴時間來回答 - 因爲我覺得一定有辦法做到這一點使用OmniAuth寶石本身我不是這標誌着作爲回答,只是還沒有。 OmniAuth :: Strategy有一個請求方法(http://intridea.github.com/omniauth/OmniAuth/Strategy.html#request-instance_method),看起來像你會用的,但我不知道如何獲得我正在使用的策略實例。這有意義嗎? – 2011-04-23 20:45:43

+0

'request'返回(或創建)認證呼叫期間使用的'Rack :: Request'。例如,請參閱[此行](https://github.com/intridea/omniauth/blob/acfe00f562/oa-oauth/lib/omniauth/strategies/oauth.rb#L52)和[此行](https: //github.com/intridea/omniauth/blob/acfe00f562/oa-core/lib/omniauth/strategy.rb#L132)。 – 2011-04-23 20:58:40

相關問題