2013-02-20 17 views
10

L'attuale omniauth-facebook sembra avere alcuni problemi, e voglio sapere se qualcuno ha delle risposte.Rails omniauth-facebook numero irrisolto

Il primo problema era il problema non valido. Non sono riuscito ad accedere alla mia applicazione utilizzando l'autorizzazione lato client a causa di questo problema. Tuttavia, questo potrebbe essere risolto effettuando il downgrade di facebook-omniauth alla versione 1.4.0. (reference)

Tuttavia, ora sto incontrando secondo problema, NoAuthorizationCodeError, con il messaggio di errore:

OmniAuth Strategies Facebook NoAuthorizationCodeError 
(must pass either a `code` parameter or a signed request 
(via `signed_request` parameter): 

questo è stato chiesto nel here, ma la risposta accettata consiglia di realtà aggiornamento-1,4 .1 di nuovo la versione, che renderebbe nuovamente il problema delle credenziali non valide precedenti. Quindi questa non è un'opzione per me.

Il NoAuthorizationCodeError accade quando provo ad accedere al mio applicazione all'interno di Facebook iFrame (cercato la mia app dal centro app) tramite Internet Explorer . Tutto funziona bene su Chrome o Firefox. C'è anche un github issue che identifica esattamente questo problema, ma nessuno ha ancora trovato una risposta. Ho anche provato a eseguire il downgrade alla versione 1.3.0 di omniauth-facebook, ma non ha fatto alcuna differenza. Ho anche provato a passare nel parametro signed_request come segue:

window.location = '/auth/facebook/callback', 
{ signed_request: response.authResponse.signedRequest } 

Tuttavia, non faceva alcuna differenza (su IE, l'errore persiste), e non sono sicuro se questo è il modo giusto passare il codice come parametro (come controllo?)

Presumo che non ci siano problemi con le mie impostazioni. Gradirei davvero qualsiasi aiuto in merito.

UPDATE:

ho aggiornato alla 1.4.1 versione senza dover valida problema di credenziali, ma NoAuthorizationCodeError si verifica ancora quando accedo l'applicazione all'interno di Facebook tramite Internet Explorer. Controlla il mio Github issue.

UPDATE:

ho declassato a 1.4.0 versione, e ha aggiunto params signedRequest.

<script> 
function login() { 
    FB.login(function(response) { 
    if (response.authResponse) { 
     window.location = '/auth/facebook/callback?' + $.param({ signed_request: response.authResponse.signedRequest }) 
    } 
    }, {scope: 'email,publish_stream,publish_actions'}); 
} 
</script> 

Non ci sono errori o avvisi nel registro e tutto funziona come previsto. Tuttavia, se accedo a Facebook iFrame tramite internet explorer, non mi accede anche dopo l'avvio della fase di callback. Immagino che il problema originale sia stato risolto ma non riesco a capire come eseguire il debug di questo quando non c'è alcun tipo di messaggio di errore.

Problema: Quando faccio clic su "Accedi con Facebook" all'interno di Facebook iFrame per la mia applicazione con Internet Explorer, NON ho effettuato l'accesso al termine del processo di autorizzazione. Questo problema si verifica solo in quell'ambiente specifico e ho avuto difficoltà a cercare di capire perché.

2013-02-22T01:10:40+00:00 app[web.1]: Started GET "/auth/facebook/callback?signed_request=LONGSTRING" for 200.1.102.103 at 2013-02-22 01:10:40 +0000 
2013-02-22T01:10:40+00:00 app[web.1]: (facebook) Callback phase initiated. 
2013-02-22T01:10:40+00:00 app[web.1]: Processing by SessionsController#create_facebook as HTML 
2013-02-22T01:10:40+00:00 app[web.1]: Parameters: {"signed_request"=>"LONGSTRING", "provider"=>"facebook"} 
2013-02-22T01:10:40+00:00 app[web.1]: User Load (1.6ms) SELECT "users".* FROM "users" WHERE "users"."provider" = 'facebook' AND "users"."uid" = 'MYUID' LIMIT 1 
2013-02-22T01:10:40+00:00 app[web.1]: (0.8ms) BEGIN 
2013-02-22T01:10:40+00:00 app[web.1]: User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE ("users"."name" = 'MYNAME' AND "users"."id" != 3) LIMIT 1 
2013-02-22T01:10:40+00:00 app[web.1]: (0.9ms) COMMIT 
2013-02-22T01:10:40+00:00 app[web.1]: Redirected to http://MYAPP.COM 
2013-02-22T01:10:40+00:00 app[web.1]: Completed 302 Found in 10ms (ActiveRecord: 4.2ms) 

Ancora, in qualsiasi altro ambiente l'autorizzazione funziona perfettamente su tutti i browser. Questo problema si verifica solo quando si tenta di accedere a all'interno di Facebook tramite Internet Explorer.

mio ambiente: omniauth-facebook 1.4.0, 1.1.1 omniauth, OAuth2 0.8.0, Rails 3.2.11

Ho volutamente retrocesso omniauth-facebook da 1.4.1 a 1.4.0 a causa di l'errore credenziali non valide nell'ultima versione.

+0

Anche io ho riscontrato lo stesso problema, dopo aver eseguito il downgrade del gem di omniauth-facebook nel problema della versione 1.4.0 risolto. – prabu

risposta

0

fastcatch indicato nel this SO inviare con l'aiuto di getting-more-information-from-omniauth-exceptions che dice,

... OmniAuth strategies [...], if they encounter a problem, call the method fail! and pass in a symbol describing the problem like :invalid_credentials and the exception they encountered. The fail! method ends up calling OmniAuth.config.on_failure and passing in the Rack environment (after doing a few other things like sticking the exception into the environment...

+0

Grazie a @saurabh, ma questo non risolve il problema indicato. Conosco già queste informazioni. –

1

Sfruttate omniauth (1.1.3), OAuth2 (0.8.1) e omniauth-facebook (1.4. 1).

Non si ottiene alcun errore con questi

0

Perché si sta vedendo solo il problema in Internet Explorer quando si utilizza un iframe, può essere un problema P3P.

Vedi http://www.slideshare.net/cmercier/things-i-learned-writing-a-facebook-canvas-app e Cookie blocked/not saved in IFRAME in Internet Explorer:

Internet Explorer dà più basso livello di fiducia a pagine IFRAME (IE chiama questo contenuto "di terze parti"). Se la pagina all'interno dell'IFRAME non ha un'Informativa sulla privacy, i suoi cookie sono bloccati (che è indicato dall'icona a forma di occhio nella barra di stato, quando si fa clic su di esso, viene visualizzato un elenco di URL bloccati). ... In questo caso, quando i cookie vengono bloccati, l'identificativo di sessione non viene inviato e lo script di destinazione genera un errore di "sessione non trovata".

Prova ad aggiungere la gemma rack-p3p e verifica se è utile!

Problemi correlati