我想将 Devise 与两个命名空间一起使用:一个 API 命名空间和默认命名空间,但是当用户尝试登录时,这两者似乎是冲突的。意思是,首先引用 Devise 的命名空间最终成为最终的重定向位置。例如:如果我尝试在默认命名空间下创建新会话,它将在该用户会话路径上失败,然后尝试在 API/v1 会话路径上创建会话。
如何让两者独立行动?
它们都引用了一个用户对象。默认命名空间的 user_sessions 控制器是“user_sessions”。API/V1 命名空间的 user_sessions 控制器是 '/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 命名空间自定义设计基础控制器 ----
class Api::V1::DeviseBaseController < Devise::SessionsController
respond_to :json
end