8

OmniAuthを使用するサービスからトークン/シークレットを受け取り、それをユーザー用に保存できますが、実際にこれらを使用してサービスを呼び出す方法がわかりません。

私がこの質問に最も近いものはここにありますが、彼が解決した方法は正しくないと感じています。あなたが何をしているのかを知っていれば、OmniAuthがこれをすべてやってくれると思います。

Netflixにはかなり複雑な認証プロセスがあるので、OmniAuthを使用してこれらすべてから私を抽象化することで、これらすべてを回避したいと思っていました。

ユーザーのトークンとシークレットを持っているとすると、Netflixのようなサービスを呼び出す際にこれらを使用するにはどうすればよいですか?

どうもありがとう :)

4

2 に答える 2

23

ねえ、私は OmniAuth gem の作者です。OmniAuth は、認証プロセスに使用するためのものです。Netflix のような OAuth プロバイダーの場合、これはリクエスト トークンをアクセス トークンと交換することを意味し、それを使用して API からユーザー情報を取得します。これらの 1 回限りの呼び出しは、プロバイダーごとに特別に設計されており、特定のプロバイダーの汎用 API クライアントになることを意図したものではありません。

できること OmniAuth を使用して資格情報を取得し、サイト自体に別の特定のライブラリ (ruby-netflixまたは他のものなど、何が最適かはわかりません) を使用して呼び出しを行います。にアクセスして、認証ダンスで取得したアクセス トークンとシークレットを取得し、env['omniauth.auth']['credentials']それらを使用して API クライアントを初期化できます。

OAuth ライブラリを直接使用してこれらの呼び出しを行うこともできますが、既存のライブラリを使用することを強くお勧めします。はるかに高速で簡単です。それはすべて意味がありますか?

于 2011-04-24T20:36:02.873 に答える
7

OmniAuth はすべて認証に関するものです。サービスを実際に呼び出すには、おそらく別の 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")

Facebook や Twitter などの人気のあるサービスには、トークンの作成や URL の管理などの舞台裏を管理できる gem があることに注意してください。Netflix の場合は、次のことを確認してください。

また、OmniAuth はサービス データを返すだけであることにも注意してください。自由に保存して、好きなように使用できます (Devise には OmniAuth 用の独自のパターンがあり、境界線の外に出ようとすると頭を突っ込む可能性があります)。あなたがリンクした他の質問は、私にはあまり当てにならないようです。

于 2011-04-18T05:39:24.460 に答える