Qualcuno può aiutarmi ad andare a fondo di questo problema?Perché il callback Devise + Omniauth non ha colpito il controller corretto?
Sto utilizzando Devise + Omniauth in un'applicazione Rails 3.2. Quello che voglio sapere è, cosa sta succedendo dietro le quinte con il metododi Devise.
Ho avuto uno scavare attraverso le rotte del rake e la fonte della gemma, ma non riesco a vedere nulla di ovvio che possa causare il problema che sto avendo.
Presumo che questo metodo chiama semplicemente l'URL di accesso del provider (ad esempio Twitter) e quindi torna al percorso di richiamata definito in routes.rb.
Nel mio routes.rb ho
devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth_callbacks'}
devise_scope :user do
get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
end
Nel utenti/omniauth_callbacks_controller.rb ho
def twitter
render :text => "This works"
end
def passthru
render :text => "This doesn't work"
end
In vista ho <%= link_to "Twitter", user_omniauth_authorize_path(:twitter) %>
. Cliccando su questo link si accede a Twitter, dove posso accedere, ma al ritorno alla mia app viene visualizzato un messaggio di errore "Sei già registrato".
Non riesco a capire come e perché questo errore viene generato. Dovrei vedere solo "Questo funziona" o "Questo non funziona".
Ho anche un provider di Facebook impostato esattamente allo stesso modo, e funziona come previsto.
Se si sostituisce il collegamento di omniauth di Devise con <a href="https://stackoverflow.com/users/auth/twitter">Twitter</a>
, viene visualizzato "Funziona".
Quindi questo risolve il mio problema, ma non è l'ideale e mi piacerebbe sapere perché.
Qualcuno può far luce?
EDIT
percorsi Rake aspetto:
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:twitter|facebook)
hi askitaka, grazie per questi suggerimenti. Sto usando 'passthru' in base ai consigli https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview e http://stackoverflow.com/questions/5531263/omniauth-doesnt-work-with-route -globbing-in-rails3 sulla rotta globbing. Non è più consigliabile? Ad ogni modo, mi hai dato alcune nuove cose a cui pensare. Grazie! Proverò questo e riferirò. –
ciao ashitaka, potresti spiegare cosa intendi confrontando le chiamate GET. Ho eseguito 'app.get '/ users/auth/twitter'' nella console. Entrambe le chiamate restituiscono "302", che è normale. C'è un modo per esaminare queste chiamate in maggiori dettagli? O seguire il reindirizzamento 302? –
Doh! Dopo aver pensato un po 'di più, hai ragione. Era la funzione passthru. Sto usando il passthru perché ho un problema tutto in routes.rb. Mentre lavoravo su qualcos'altro, avevo modificato questa funzione per rendere il testo come da mia domanda. Ma lo scopo di questo controller è di restituire un 404 su richieste omniauth. Senza la funzione passthru, omniauth semplicemente non funziona. Senti un po 'stupido ora :) Grazie per aver segnalato questo ashitaka! –