如何使用omniauth对服务进行经过身份validation的调用?

我从使用OmniAuth的服务中收到了令牌/秘密,并且可以将其存储给用户,但我不知道如何实际使用这些来调用服务。

我在这个问题上看到的最接近的事情就是在这里,但他解决的方式是感觉不对。 如果你知道你在做什么,我觉得OmniAuth可能会为你做这一切。

Netflix有一个非常复杂的身份validation过程 ,因此我希望通过使用OmniAuth从所有这些中抽象我来避开所有这些。

鉴于我有一个用户的令牌和秘密,如何使用这些来调用像Netflix这样的服务?

非常感谢 :)

嘿,我是OmniAuthgem的作者。 OmniAuth旨在用于身份validation过程。 对于像Netflix这样的OAuth提供商,这意味着交换访问令牌的请求令牌,然后用于从API中提取用户信息。 这些一次性调用是专门为每个提供程序设计的, 并不是给定提供程序的通用API客户端。

您可以做什么使用OmniAuth 获取凭据,然后使用另一个特定的库来为网站本身(例如ruby-netflix或其他任何东西,我不确定最好的是什么)来打电话。 您可以通过访问env['omniauth.auth']['credentials']来检索在身份validation舞中获得的访问令牌和秘密,然后使用这些来初始化API客户端。

您也可以直接使用OAuth库进行这些调用,但我强烈建议您只使用现有的库,它会更快更容易。 所有这些都有意义吗?

OmniAuth是关于身份validation的; 您可能应该查看另一个gem来实际调用该服务。 例如,对于Facebook,我使用OAuth2 gem和代码如下:

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

请注意,有流行服务的gem,如Facebook和Twitter,可以管理幕后的事情,如创建令牌,管理URL等。对于Netflix,您可以检查以下内容:

另请注意,OmniAuth只是将服务数据返回给您; 你可以自由地存储它并按照你的意愿使用它(如果你试图超越线路,你可以设置OmniAuth自己的模式)。 你链接的另一个问题对我来说并不太遥远。

Interesting Posts