2014-07-04 11 views
5

Tôi có một mô hình Ứng cử viên được đưa ra có thể bỏ qua (linkedin).Devise + Omniauth, các tuyến đường phiên bản

Cho đến nay, tôi routes.rb trông như thế này:

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

Tất cả mọi thứ hoạt động tốt cho đến khi tôi đã có thêm một phiên bản mới:

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

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

Với cấu hình hiện tại, tôi nhận được lỗi này:

`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 

Đó là loại tội lỗi gây phiền nhiễu ce Tôi muốn có thể xác thực ứng viên trên cả hai phiên bản.

Tôi có thể làm gì?

+1

Bạn đã tìm thấy giải pháp chưa? Tôi đang đối mặt với vấn đề chính xác ở đây. :( – jlstr

+0

Tôi đã không, cho tôi biết nếu bạn tìm thấy một cái gì đó;) –

+1

CÓ !, Tôi đã tìm cách sửa chữa nó. Tôi sẽ đăng nó như là một câu trả lời sớm. – jlstr

Trả lời

12

Alright, hãy tóm tắt lại một chút ở đây, lập mưu không cho phép bạn để gọidevise_for phương pháp bên trong một scope hoặc một con đường namespace quy định trong config/tập tin routes.rb, phải không?

đường namespace'd của tôi trông như thế này:

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

Và nó hoạt động!

Tôi đã làm gì để làm cho nó hoạt động? câu trả lời nằm trong tệp config/initializers/devise.rb. Kiểm tra gần cuối File nó nói ...

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

Dòng bình luận tiếp theo cho thấy bạn một ví dụ, bỏ ghi chú dòng đó và sửa đổi nó theo yêu cầu của bạn, đối với trường hợp của tôi (tức là . Đối với tuyến đường không có tên tôi có ở trên) Tôi có:

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

Và đó là nó! .... Tôi đã làm điều đó và tất cả bắt đầu hoạt động hoàn hảo!

Hy vọng điều đó sẽ hữu ích!

+1

Cảm ơn nó thực sự hữu ích –

Các vấn đề liên quan