API名前空間とデフォルトの名前空間の2つの名前空間でDeviseを使用したいのですが、ユーザーがサインインしようとすると、2つが競合しているようです。つまり、Deviseを最初に参照する名前空間が、最終的なリダイレクト場所になります。例:デフォルトの名前空間で新しいセッションを作成しようとすると、そのユーザーセッションパスで失敗し、API/v1セッションパスでセッションを作成しようとします。
2つを独立して動作させるにはどうすればよいですか?
どちらもUserオブジェクトを参照しています。デフォルトの名前空間の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 ----(これは以下にマークされた私のカスタムDeviseベースコントローラーに行きます)
class Api::V1::UserSessionsController < Api::V1::DeviseBaseController
...
end
---- API NAMESPACE CUSTOM DEVISE BASE CONTROLLER ----
class Api::V1::DeviseBaseController < Devise::SessionsController
respond_to :json
end