2012-05-30 13 views
5

Sto utilizzando Devise e Omniauth per la mia procedura di accesso. Per qualche motivo, posso accedere al percorso "utenti/auth/facebook" o "utenti/auth/twitter" bene. Ma non vengono visualizzati quando eseguo il roke route, quindi non ho idea di quale sia il metodo helper per ottenere questi percorsi (ad es. Qualcosa_qualcosa_punto). Qualcuno mi può aiutare?Percorsi di rastrellamento che non mostrano il percorso, ma esiste quando è codificato in modo fisso

non posso mostrare tutte le mie vie, ma posso dire che l'unico percorso che corrisponde a "/ utenti/auth/..." che sta mostrando è questo uno (da rake routes):

user_omniauth_callback  /users/auth/:action/callback(.:format) {:action=>/(?!)/, :controller=>"users/omniauth_callbacks"} 

a proposito, quando dico io "può accedere al percorso più che bene", voglio dire questo funziona (mi reindirizza correttamente a Facebook o Twitter):

<%= link_to "Connect", "users/auth/facebook" %> 

Inoltre, i percorsi dovrebbe essere il default Definire percorsi omniauth per il modello utente

risposta

4

Per quanto riguarda il motivo per cui questo doesn Si visualizzi in rake routes, prima nota come viene implementata l'attività. Fa parte di railties, e ottiene i percorsi per mostrare as such:

Rails.application.routes.routes 

Così possiamo vedere che sta chiedendo la Rails.application per i suoi circuiti.


nota successiva che il Omniauth gem "è un sistema di autenticazione flessibile che utilizza Rack middleware".

Poiché utilizza middleware Rack, non "conosce" nulla sullo Rails.application utilizzato da rake routes e pertanto i suoi percorsi non vengono visualizzati in tale attività.

È possibile ottenere una buona introduzione al middleware Rack in this Railcast.


Scavando un po 'più in profondità possiamo vedere dal rake middleware che OmniAuth::Builder appare prima della applicazione Rails nella pila. Quindi, come gestisce il percorso auth/twitter?

Lo fa controllando per un request_path nella sua call, si può vedere l'assegno here, e si può vedere come il request_path è costruito here (path_prefix è auth per impostazione predefinita e name nel tuo caso è twitter.

Quando si utilizza Omniauth con Devise, il path_prefix viene impostato automaticamente, come notato here.

+1

Ottima risposta, e taglio di capelli fantastico! ;) – asymmetric

0

Perché non si presentano sulle rotte dei rake, non sono sicuro. Ma se volete sapere il loro alias li potete trovare qui: https://github.com/plataformatec/devise/wiki/OmniAuth%3A-Overview

Dalle loro documentazione:

Attualmente, Inventi permette solo di effettuare un omniauthable modello. Dopo aver omniauthable un modello di nome utente e se "devise_for : gli utenti" è stato già aggiunto al tuo config/routes.rb, Devise creerà i seguenti metodi: url

user_omniauth_authorize_path (provider) user_omniauth_callback_path (fornitore)

Quindi se hai devise_for :model nei tuoi percorsi dovresti vedere il metodo url.

Esempio:

<%= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %> 

anche se si dà un'occhiata alla realizzazione di disposizione testamentaria, si può vedere che gli aiutanti URL sono lì:

https://github.com/plataformatec/devise/blob/master/lib/devise/omniauth/url_helpers.rb

+0

Sì .. provato ma purtroppo non funziona neanche. errore di metodo non definito. :( – varatis

+0

che ver cosa stai usando? 1,0? –

+0

sì sto usando 1.0 – varatis

Problemi correlati