2011-04-15 58 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

相关问题