2012-04-23 19 views
6

我想用設計有兩個命名空間:一個API命名空間,默認的命名空間, 但兩人似乎當用戶試圖登錄到有衝突 含義爲準。參考設計的名稱空間首先結束 是最後的重定向地點。例如:如果我嘗試在默認命名空間下創建新會話 ,它將在該用戶會話路徑 上失敗,然後嘗試在API/v1會話路徑上創建會話。使用設計與多個命名空間爲同一型號

我該如何獨立做這兩件事?

它們都引用一個用戶對象。默認命名空間的user_sessions控制器 是'user_sessions'。所述user_sessions 控制器爲API/V1命名空間是 '/ 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 

----- DEFAULT NAMESPACE USER_SESSIONS_CONTROLLER -----

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

API NAMESPACE USER_SESSIONS_CONTROLLER - ---(這個去下面標明我的自定義設計的基本控制器)

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

---- API NAMESPACE CUSTOM制定基本控制器----

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

回答

6

我發現這是不可能的設計,你必須有一個登錄/登出源。乾淨的解決方案:爲您的API和Web命名空間創建指向相同Devise控制器代碼(比如/ user/sessions)的路由。在那裏,爲適當的響應調用partials(JSON,HTML)。那些部分可以放在每個命名空間的視圖目錄中,保持乾淨。

2

您應該需要爲像admin和最終用戶這樣的用戶定義兩個不同的角色。

,然後定義這些路線他

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 

然後管理員將從這個網址 本地主機登錄:3000 /管理員

然後end_user將從這個網址 本地主機登錄:3000/end_user

對於定義角色看到這個

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

希望你能得到的想法

+0

如果你看看我發佈的代碼,我已經完成了。你提出的解決方案有什麼不同? – beeudoublez 2012-05-04 23:29:02

相關問題