2012-03-16 5 views
7

Sto seguendo le istruzioni di Ryan Bate per l'utilizzo Omniauth per impostare l'autenticazione di terze parti, solo che sto cercando con Facebook piuttosto che Twitter, che si mette in Railscast 235.non possono autenticarsi con Facebook

Dopo l'installazione gemma omniauth-facebook, e la creazione di dell'inizializzatore

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, 'APP_ID', 'APP_SECRET' 

end 

dovrei essere in grado di andare a localhost: 3000/auth/facebook e sarà presentato con il login di Facebook (anche se non finirà per lavorare perché non abbiamo ancora impostato l'url di richiamata) Tuttavia, quando vado a quell'URL, ottengo questo errore

{ 
    "error": { 
     "message": "Error validating application.", 
     "type": "OAuthException", 
     "code": 101 
    } 
} 

e l'URL cambia effettivamente

https://graph.facebook.com/oauth/authorize?response_type=code&client_id=APP_ID&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Ffacebook%2Fcallback&scope=email%2Coffline_access 

Sulla mia app, ho impostato Devise e seguito le istruzioni sul wiki Devise per l'integrazione di autorizzazione Facebook https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

qualcuno può dirmi quale potrebbe essere il problema?

Facendo una ricerca su Google sul messaggio di errore ha rivelato che un bel paio di persone hanno sperimentato questo problema nelle ultime settimane, ma non riusciva a trovare nessuno con una soluzione enter image description here

+5

downvote senza commenti? infantile – Leahcim

+1

+1 Il voto di compensazione, mi sembra legittimo. – Gary

risposta

7

Ho cercato 101 e mi sono imbattuto in this page. Come puoi vedere, questo errore sta per Chiave API non valida, quindi credo che il problema risieda nel punto in cui hai definito la tua chiave.

è necessario impostare la chiave e il vostro segreto in un file separato (per la chiarezza e la sicurezza), ma essere consapevoli che i file Rails carica in alfabetico ordine in modo che il file che definisce queste costanti dovrebbe avere un nome che viene prima il file che configura la connessione oauth. Nel mio caso, ho creato un file chiamato constants.rb, che viene prima dello devise.rb. Inoltre, assicurati di tenere questo file lontano dal controllo del codice sorgente. Non vuoi che le altre persone abbiano le tue chiavi e i tuoi segreti.

# config/initializers/constants.rb 
FACEBOOK_KEY = 'string' 
FACEBOOK_SECRET = 'string' 

Poi configurare la connessione nel file di concepire se si utilizza concepire o nel file omniauth se si utilizza semplice omniauth:

# config/initializers/devise.rb|omniauth.rb 
require 'omniauth-facebook' 
config.omniauth :facebook, FACEBOOK_KEY, FACEBOOK_SECRET 

Ora, c'è un modo migliore per farlo utilizzando Variabili ENV. Raccomando lo Figaro gem perché semplifica davvero la configurazione delle app.

Se si desidera visualizzare la finestra di dialogo pagina di facebook come popup, ti consigliamo di utilizzare

config.omniauth :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, :display => 'popup' 

E seguire this question tardi lungo la strada.

E, se siete su Windows, avrete bisogno di un certificato in modo che la connessione SSL non abbia esito negativo. La soluzione a questo problema è chiarita da Arcolye here.

Infine, per verificare localmente il tuo login, tutto ciò che devi fare è definire l'URL del tuo sito come http://localhost:3000/. Questo è tutto ciò che c'è. È necessario non definire l'URL della tela.

+0

stranamente, ho avuto lo stesso errore con la tua soluzione, ma quando ho spostato i numeri di autenticazione per Facebook_key e facebook_secret direttamente in config/initializers/devise.rb (cioè non ho usato le costanti nel file costanti), allora ha funzionato ... – Leahcim

+0

Stavi usando una variabile ENV? – Ashitaka

+0

prima di rispondere stavo usando le variabili di ambiente nel terminale (e ho anche testato le variabili d'ambiente su heroku senza successo). poi dopo aver risposto, ho inserito le chiavi effettive nel file delle costanti come suggerito. non ha funzionato, ma poi quando ho messo le chiavi in ​​devise.rb ha funzionato ... tornerò a indagare più tardi questa sera, spero, ma penso che sia quello che è successo. Almeno siamo vicini a una soluzione :) – Leahcim

0

In primo luogo, assicurarsi di avere il seguente in routes.rb:

# Auth callback routes 
match '/auth/:provider/callback' => 'sessions#create' # This route is hit when a user gives the app permissions (the auth hash will be in request.env['omniauth.auth']) 
match '/auth/failure' => 'sessions#failure' # This route is hit when a user doesn't give the app permissions 

in secondo luogo, assicurarsi di avere il seguente in config/initializers/omniauth.rb:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, 'APP_ID', 'APP_SECRET', :scope => 'email', :display => 'page' 
end 

In terzo luogo, assicurarsi di avere http://localhost:3000/ impostato come URL Canvas nelle impostazioni dell'app Facebook (https://developers.facebook.com/apps/).

Si dovrebbe quindi essere in grado di reindirizzare semplicemente agli utenti di http://localhost:3000/auth/facebook per visualizzare la finestra di autenticazione a loro.

+0

Ho apportato queste modifiche ma sto ancora ottenendo lo stesso errore. – Leahcim

+1

Non sono sicuro allora. Uso la gemma omniauth-facebook per la mia app e funziona come pubblicizzato. Dopo la ricerca, sembra che l'unico caso possibile sia che il tuo 'APP_ID' ​​o' APP_SECRET' sia sbagliato. Doppio controllo di questi valori. –

+0

hai un progetto pubblico su github con esso setup? – Leahcim

3

In passato, ho riscontrato un problema nell'utilizzo di localhost con le applicazioni di Facebook. Quello che ho finito è stato creare una voce nel mio file host sul mio computer per indirizzare fbdev.com a localhost e usare "fbdev.com" al posto di localhost nelle impostazioni dell'app su Facebook.

1

Stavo ricevendo lo stesso errore ma mi ero dimenticato di riavviare il server dopo aver aggiunto il mio APP_ID e APP_SECRET :-P Forse che sarà d'aiuto?

+0

Haha. Grazie. Questo ha risolto il problema. – uohzxela