使用设计有多个命名空间为同一型号(Using Devise with multiple namesp

2019-09-16 16:35发布

我想用设计有两个命名空间:一个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

-----默认命名空间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

Answer 1:

我发现这是不可能的设计,你必须有一个登录/登出源。

清洁液:创建指向回到相同的设计控制器代码(比如,/用户/会话)都您的API和Web命名空间的路线。 在那里,呼吁适当的响应(JSON,HTML)的谐音。 这些泛音可以坐在视图目录中每个命名空间,保持干净的东西。



Answer 2:

如果您需要定义两个不同势角色的用户如管理员和最终用户。

然后定义这些路线为他

 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 /管理员

3000 / end_user:然后end_user将从这个网址登录本地主机

对于定义角色看到这

扶手:添加使用设计谁可以看到所有用户的管理角色

希望你能得到的想法



文章来源: Using Devise with multiple namespaces for the same Model