2011-11-07 14 views
6

Netflix APIを使用して履歴とキューなどの加入者情報にアクセスしようとしている単純なRailsアプリケーションがあります。私の問題は、私が何をするにしても、Netflixは私のoauth_callback URLを使わず、代わりに私のユーザー資格情報でアプリケーションを認証した後、私をNetflixサイトに転送します。ここで Netflix OAuth APIでコールバックを使用するにはどうすればよいですか?

は、NetflixのAPI

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 Login/Authorizeアプリページが表示されます。私は、このページのソースを見れば

Netflix Link Account page

しかし、私はいくつかの異なる方法をチェックしましたoauth_callbackフィールドがoob

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

に設定された形で表示され、私はoauth_callbackパラメータをNetflix Authentication Walkthroughとちょうど同じに設定しています。実際に、私がウォークスルーを通過して自分のフィールドにコールバックURLを入れると、実際には自分のレールアプリケーションにリダイレクトされます。

だから、私の質問は、誰も私の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ているセットを、見ることができます。

EDIT2:

私は、Mac OS X 10.6.8にoauth (0.4.5)rails (3.1.0)ruby-1.9.2-p290 [ x86_64 ]を使用しています。

+0

リクエストがapi-userに送信されたときにリクエストパラメータを指定することもできます(ハッシュをランダム化するのを忘れないでください)。 –

+0

あなたはconsumer.get_request_tokenコールのoauth_callbackではありませんか? http://developer.netflix.com/docs/Security – esskar

+0

@phil pirozhkovを参照してください。api-userにリクエストを追加しました。 – sorens

答えて

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を得て、変更を加えて、フォームに正しい値を与えました。

-1

Netflix Authentication Walk-Throughを試してみて、あなたのアカウントで使えますか?それはfirefoxを使って私のために働いた。 (私はまた、&をURLに貼り付けてIEにコピーして、正しくリダイレ​​クトされました)。ウォークスルーのURLと生成しているURLを比較し、問題を解決してください。

+0

あなたが私の質問を読んだ場合、私はすでに結果を比較するためにウォークスルーを使用したことを示しました。 – sorens

+0

コールバックは単なる普通のパラメータなので、私のことは混乱します。後でそれを変更することは問題ではありません(私はあなたがネット修正のログイン画面を見た後であることを意味します)! – esskar

関連する問題