2011-11-07 12 views
6

Ho una semplice applicazione Rails con cui sto cercando di utilizzare l'API Netflix per accedere ad alcune delle mie informazioni di sottoscrizione, come la mia cronologia e la mia coda. Il mio problema è che, qualunque cosa io faccia, Netflix non userà il mio URL oauth_callback, ma invece mi inoltrerà al sito Netflix dopo che autorizzo l'applicazione con le mie credenziali utente.Come faccio a fare in modo che l'API OAuth di Netflix utilizzi la mia callback?

Ecco il codice di controllo che effettua la richiesta alle API Netflix

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 

Il controller reindirizza correttamente https://api-user.netflix.com/oauth/login sito, con tutti i parametri impostati correttamente. Ottengo la pagina di accesso/autorizzazione di Netflix.

Netflix Link Account page

Tuttavia, se guardo la sorgente di questa pagina, vedo in forma che il campo oauth_callback è impostato su oob

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

Ho controllato molti modi diversi, e Sto impostando il parametro oauth_callback allo stesso modo dello Netflix Authentication Walkthrough. In effetti, quando passo alla procedura dettagliata e inserisco l'url di richiamata nel loro campo, in effetti viene reindirizzato all'applicazione rails.

Quindi, la mia domanda, qualcuno sa come rendere Netflix rispettare il mio campo oauth_callback?

edit:

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] 

Si può vedere oauth_callback=http%3A%2F%2Fnetflix.dev%2Fexport_callback%2F essere set, che è la strada per il mio guide locali app.

EDIT2:

Sto usando il oauth (0.4.5) e rails (3.1.0) e ruby-1.9.2-p290 [ x86_64 ] su Mac OS X 10.6.8.

+0

Potete anche fornire i parametri di richiesta quando la richiesta sta per api-utente (e non dimenticare di randomizzare gli hash!)? –

+0

non è la oauth_callback per la chiamata consumer.get_request_token? vedi http://developer.netflix.com/docs/Security – esskar

+0

@phil pirozhkov Ho aggiunto la richiesta a api-user. – sorens

risposta

1

Il oob che è nella forma probabilmente si riferisce a "fuori limite". Il problema è con:

request_token = consumer.get_request_token 

Netflix fa perdere l'URL di richiamata quando si ottiene il token di richiesta, e verifica l'URL nella pagina di login. Nel tuo caso, se si cambia a:

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

Tutto dovrebbe funzionare da quel punto in poi, e la forma sarà ottenere questo valore. Ho testato il tuo codice, ho ottenuto lo stesso oob e poi ho aggiunto la modifica e ha fornito il valore corretto nel modulo.

-1

Provare il Netflix Authentication Walk-Through e vedere se funziona per il tuo account? ha funzionato per me usando Firefox. (Ho anche copiato & incollato l'url in IE e poi reindirizzato correttamente). Dovresti quindi provare a confrontare l'url dal walk-through con l'url che stai generando e inchiodare il problema.

+0

Se hai letto la mia domanda, ho già indicato che ho usato il walk-through per confrontare i miei risultati. – sorens

+0

Il mio male, mi confonde poiché la richiamata è solo un parametro normale: non firmato o nulla; cambiarlo in seguito non è un problema (voglio dire dopo aver visto la schermata di accesso alla correzione della rete)! – esskar

Problemi correlati