2014-07-04 20 views
5

Mam model Candidate który jest wymyślony omniauthable (linkedin).Devise + Omniauth, wersjonowanie tras

Dotychczas moja routes.rb wyglądał następująco:

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

Wszystko działało dobrze aż musiałem dodać nową wersję:

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

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

Przy obecnej konfiguracji, mam ten błąd:

`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 

To rodzaj denerwującego grzechu ce Chcę móc uwierzytelnić kandydata w obu wersjach.

Co mogę zrobić?

+1

Czy znalazłeś rozwiązanie? Mam tutaj dokładnie ten sam problem SAM. :( – jlstr

+0

Nie, daj mi znać, jeśli coś znajdziesz;) –

+1

TAK !, Znalazłem, jak to naprawić. Wkrótce opublikuję to jako odpowiedź. – jlstr

Odpowiedz

12

Dobra, niech podsumować trochę tu, Devise nie pozwalają wywołaćdevise_for metodę wewnątrz scope lub namespace trasy zdefiniowanej w pliku config/routes.rb, prawda?

Moja namespace'd trasa wygląda następująco:

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

I to działa!

Co zrobiłem, aby działało? odpowiedź leży w pliku config/initializers/devise.rb. Sprawdź w dolnej części pliku to mówi ...

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

Następny skomentował linia pokazuje przykład znak komentarza tej linii i zmodyfikować go w zależności od potrzeb, w moim przypadku (tj dla podanej nazwy trasy mam powyżej) Mam:

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

I to wszystko! .... Zrobiłem to i wszystko zaczęło działać idealnie!

Mam nadzieję, że pomoże!

+1

Dzięki, że to naprawdę pomocne –

Powiązane problemy