我收到使用OmniAuth令牌/从服务秘密,并可以将其存储的用户,但我坚持就如何实际使用这些来调用服务。如何使用omniauth对服务进行认证调用?
我已经看到了这个问题最接近的事是here但这样他解决,有感觉不对。如果你知道你在做什么,我觉得OmniAuth可能会为你做这一切。
Netflix有一个很好的auth process,所以我希望通过使用OmniAuth从所有这些中抽象出所有这一切。
假设我有一个用户,如何在调用诸如Netflix的服务中使用这些令牌和秘密?
非常感谢:)
我收到使用OmniAuth令牌/从服务秘密,并可以将其存储的用户,但我坚持就如何实际使用这些来调用服务。如何使用omniauth对服务进行认证调用?
我已经看到了这个问题最接近的事是here但这样他解决,有感觉不对。如果你知道你在做什么,我觉得OmniAuth可能会为你做这一切。
Netflix有一个很好的auth process,所以我希望通过使用OmniAuth从所有这些中抽象出所有这一切。
假设我有一个用户,如何在调用诸如Netflix的服务中使用这些令牌和秘密?
非常感谢:)
嘿,我是OmniAuth宝石的作者。 OmniAuth旨在用于身份验证过程。对于像Netflix这样的OAuth提供商来说,这意味着将访问令牌交换为访问令牌,然后用该访问令牌从API中提取用户信息。这些一次性呼叫是专门为每个提供商设计的,并且是而不是,意味着它是给定提供商的通用API客户端。
你可以做什么用它来OmniAuth获得的凭据,然后使用该网站本身另一特定库(如ruby-netflix
或其他任何东西,我不知道最好的是什么)拨打电话。您可以通过访问env['omniauth.auth']['credentials']
来检索通过认证舞蹈获得的访问令牌和秘密,然后使用这些来初始化API客户端。
您也可以直接使用OAuth库进行这些调用,但我强烈建议只使用现有的库,它会更快更轻松。所有这些都有意义吗?
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模式,如果你试图超出范围,你可能会碰到这种模式)。你链接的另一个问题看起来不太过分。
感谢您抽出宝贵时间来回答 - 因为我觉得一定有办法做到这一点使用OmniAuth宝石本身我不是这标志着作为回答,只是还没有。 OmniAuth :: Strategy有一个请求方法(http://intridea.github.com/omniauth/OmniAuth/Strategy.html#request-instance_method),看起来像你会用的,但我不知道如何获得我正在使用的策略实例。这有意义吗? – 2011-04-23 20:45:43
'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
你为什么建议不要使用OAuth宝石。简单? – deepak 2011-11-22 12:05:08