2012-04-23 29 views
6

Tôi muốn sử dụng Devise với hai không gian tên: không gian tên API và không gian tên mặc định, nhưng hai dường như xung đột nhau khi người dùng cố đăng nhập. Ý nghĩa, tùy theo điều kiện nào không gian tên tham chiếu đến Devise đầu tiên kết thúc lên là nơi chuyển hướng cuối cùng. Ví dụ: Nếu tôi cố tạo một phiên mới trong không gian tên mặc định, nó sẽ không thành công trên đường dẫn phiên người dùng đó, và sau đó cố gắng tạo phiên trên đường dẫn phiên API/phiên bản v1.Sử dụng Devise với nhiều không gian tên cho cùng một kiểu mẫu

Làm cách nào để hai hành động độc lập?

Cả hai đều đề cập đến một đối tượng Người dùng. Bộ điều khiển user_sessions cho không gian tên mặc định là 'user_sessions'. Các user_sessions điều khiển cho API/V1 namespace là '/ api/v1/user_sessions'

---- ROUTES.RB ------- 
    MySite::Application.routes.draw do 
    namespace :api do 
    namespace :v1 do 
    devise_for :users,:controllers => { :sessions => "api/v1/ 
user_sessions",:registrations=>"users" } 
    ...... 
    end 
end 
devise_for :users,:controllers => { :sessions =>"user_sessions",:registrations=>"users" } do 
    post 'users/sign_in' => 'user_sessions#create', :as => :user_session 
    get 'users/sign_in' => 'user_sessions#new', :as => :new_user_session 
    get 'users/sign_up' => 'user_sessions#new', :as => :new_user_session 
    match 'users/sign_out' => 'user_sessions#destroy', :as => :destroy_user_session 
    <.....> 
end 

----- gian tên mặc định USER_SESSIONS_CONTROLLER -----

class UserSessionsController < Devise::SessionsController 
.... 
end 
---- 

API NAMESPACE USER_SESSIONS_CONTROLLER - --- (điều này đi vào bộ điều khiển của tôi tùy chỉnh lập mưu cơ sở đánh dấu bên dưới)

class Api::V1::UserSessionsController < Api::V1::DeviseBaseController 
... 
end 

---- API NAMESPACE cUSTOM đưa ra cƠ sỞ cONTROLLER ----

class Api::V1::DeviseBaseController < Devise::SessionsController 
     respond_to :json 
end 

Trả lời

6

Tôi phát hiện ra rằng điều này là không thể với Devise, bạn phải có một nguồn đăng nhập/đăng xuất.

Giải pháp làm sạch: Tạo tuyến cho cả API và các không gian tên Web trỏ ngược lại cùng mã bộ điều khiển Devise (nói,/người dùng/phiên). Trong đó, gọi partials cho đáp ứng thích hợp (JSON, HTML). Những partials có thể ngồi trong các thư mục xem cho mỗi không gian tên, giữ cho mọi thứ sạch sẽ.

2

Bạn cần xác định hai vai trò khác nhau cho người dùng như quản trị viên và người dùng cuối.

và sau đó xác định các đường bay cho anh ta

FourtySixLabs::Application.routes.draw do 

    namespace :admin do 
    resources :posts 
    end 

    namespace :end_user do 
     resources :posts 
    end 


    devise_for :users, :controllers => { 
    :sessions => "users/sessions", 
    :confirmation => "users/confirmations", 
    :passwords => "users/passwords", 
    :registrations => "users/registrations", 
    } 


    devise_for :users, as: :user do 
    get 'admin', :to => 'users/sessions#new', :as => :new_user_session 
    get "end_user", :to => "users/sessions#new" 
    get "sign_out", :to => "users/sessions#destroy" 
    end 

end 

Và sau đó admin sẽ đăng nhập từ url này localhost: 3000/admin

Và sau đó end_user sẽ đăng nhập từ url này localhost: 3000/end_user

Để xác định vai trò, hãy xem điều này

Rails : Adding an admin role using devise who can see all the users

Hy vọng bạn sẽ nhận được ý tưởng

+0

Nếu bạn nhìn vào mã tôi đã đăng, tôi đã thực hiện chính xác điều đó. Giải pháp được đề xuất của bạn khác nhau như thế nào? – beeudoublez

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