6

Netflix APIを使用して、履歴やキューなどのサブスクライバー情報の一部にアクセスしようとしている単純なRailsアプリケーションがあります。私の問題は、私が何をしても、Netflixは私のoauth_callbackURLを使用せず、代わりに、ユーザー資格情報を使用してアプリケーションを承認した後、Netflixサイトに転送することです。

NetflixAPIにリクエストを送信しているコントローラーコードは次のとおりです

class ExportController < ApplicationController

  def export
    consumer = OAuth::Consumer.new( ENV['NETFLIX_KEY'],ENV['NETFLIX_SECRET'],
      :site => "http://api.netflix.com",
      :request_token_url => "http://api.netflix.com/oauth/request_token",
      :access_token_url => "http://api.netflix.com/oauth/access_token", 
      :authorize_url => "https://api-user.netflix.com/oauth/login" )
    request_token = consumer.get_request_token
    session[:request_token]=request_token
    session[:request_token_secret]=request_token.secret
    url = request_token.authorize_url( :oauth_callback => "http://#{ENV['OAUTH_CALLBACK_DOMAIN']}/export_callback/", :oauth_consumer_key => ENV['NETFLIX_KEY'],
      :application_name => ENV['APPLICATION_NAME'] )
    redirect_to url
  end

  def export_callback
    @request_token=OAuth::RequestToken.new(session[:request_token],session[:request_token_secret]) 
    @access_token = @request_token.get_access_token(:oauth_verifier => params[:oauth_verifier])
  end
end

https://api-user.netflix.com/oauth/loginコントローラは、すべてのパラメータが正しく設定された状態で、サイトに正しくリダイレ​​クトします。Netflixのログイン/アプリの承認ページが表示されます。

Netflixリンクアカウントページ

ただし、このページのソースを見ると、oauth_callbackフィールドが次のように設定されていることがわかります。oob

      <input type="hidden" name="oauth_callback" value="oob"/>

いくつかの異なる方法を確認しましたが、 Netflix認証ウォークスルーoauth_callbackとまったく同じようにパラメーターを設定しています。実際、ウォークスルーを実行してコールバックURLをフィールドに入力すると、実際にはRailsアプリケーションにリダイレクトされます。

それで、私の質問ですが、Netflixに私のoauth_callback分野を尊重させる方法を知っている人はいますか?

編集:

https://api-user.netflix.com/oauth/login?oauth_callback=http%3A%2F%2Fnetflix.dev%2Fexport_callback%2F&oauth_consumer_key=[REMOVED]&oauth_nonce=631831&oauth_timestamp=1321458391&application_name=[REMOVED]&oauth_token=[REMOVED]

設定されていることがわかりますoauth_callback=http%3A%2F%2Fnetflix.dev%2Fexport_callback%2F。これは、私のローカルRailsアプリへのルートです。

edit2:

Mac OSX10.6.8でとを使用していoauth (0.4.5)ますrails (3.1.0)ruby-1.9.2-p290 [ x86_64 ]

4

2 に答える 2

1

そのoob形式は、おそらく「範囲外」を指します。問題は次のとおりです。

request_token = consumer.get_request_token

Netflixは、リクエストトークンを取得したときにコールバックURLを渡して、ログインページでURLを確認します。あなたの場合、それを次のように変更すると:

request_token = consumer.get_request_token( 
          :oauth_callback => 
             "http://#{ENV['OAUTH_CALLBACK_DOMAIN']}/export_callback/" )

その時点からすべてが機能するはずであり、フォームはこの値を取得します。私はあなたのコードをテストし、同じものを取得してからoob変更を追加しました、そしてそれはフォームに正しい値を与えました。

于 2011-12-15T06:32:45.357 に答える
-1

Netflix認証ウォークスルーを試して、アカウントで機能するかどうかを確認してください。それはFirefoxを使って私のために働いた。(その後、URLをコピーしてIEに貼り付け、正しくリダイレ​​クトされました)。次に、ウォークスルーのURLと生成しているURLを比較して、問題を特定する必要があります。

于 2011-11-16T17:32:51.817 に答える