2014-07-04 10 views
5

Ho un modello Candidato che è concepito omniauthable (linkedin).Devise + Omniauth, route versioning

Finora, il mio routes.rb si presentava così:

namespace :v1 do 
    devise_for :candidates, only: :omniauth_callbacks 
    ... 
end 

Tutto ha funzionato bene fino a quando ho dovuto aggiungere una nuova versione:

namespace :v2 do 
    devise_for :candidates, only: :omniauth_callbacks 
    ... 
end 

namespace :v1 do 
    devise_for :candidates, only: :omniauth_callbacks 
    ... 
end 

con l'attuale configurazione, ottengo questo errore:

`set_omniauth_path_prefix!': Wrong OmniAuth configuration. If you are getting this exception, it means that either: (RuntimeError) 
1) You are manually setting OmniAuth.config.path_prefix and it doesn't match the Devise one 
2) You are setting :omniauthable in more than one model 
3) You changed your Devise routes/OmniAuth setting and haven't restarted your server 

È un po 'fastidioso peccato ce voglio essere in grado di autenticare il candidato su entrambe le versioni.

Cosa posso fare?

+1

Hai trovato una soluzione? Sto affrontando l'esatto problema SAME qui. :( – jlstr

+0

Non l'ho fatto, fatemi sapere se trovate qualcosa;) –

+1

SI !, ho trovato come aggiustarlo. Lo posterò presto come risposta. – jlstr

risposta

12

Bene, ricapitoliamo un po 'qui, Devise non consente di chiamare il metododevise_for all'interno di un scope o una rotta namespace definito nel file di configurazione/routes.rb, giusto?

mio percorso namespace'd si presenta così:

namespace :api, constraints: { format: :json } do 
    devise_for :users, skip: [ :registrations, :passwords, :confirmations ] 
    resources :profiles, only: :show 
end 

E funziona!

Cosa ho fatto per farlo funzionare? la risposta è nel file config/initializers/devise.rb. Controlla vicino alla parte inferiore del file si dice ...

# When using omniauth, Devise cannot automatically set Omniauth path, # so you need to do it manually. For the users scope, it would be:

La linea commentato successiva mostra un esempio, decommentare quella linea e modificarlo base alle proprie esigenze, per il mio caso (vale a dire .Per il percorso dei nomi che ho sopra) Ho:

config.omniauth_path_prefix = "/api/users/auth" 

E il gioco è fatto! .... l'ho fatto e tutto ha funzionato perfettamente!

Spero che aiuti!

+1

Grazie è davvero d'aiuto –