我在现有的rails 4.2 app上安装了Devise。
我想逐步推出一个新的登录系统(使用设计),其中当前的登录系统(自定义)仍在并行工作。应用程序的某些部分我想使用新系统。
之前的设置定义了以下路线:
resources :sessions, :only => [:new, :create, :destroy]
resources :password_resets
resources :users do
member do
get 'verify_email/:token', :action => 'verify_email', :as => :verify_email
end
end
所以我创建了一个名为CustomerUser
的新用户模型。
然后我添加了设计路线:
devise_for :customer_users
resource :customer_users
注册视图正常工作,但登录(会话)与现有路由冲突。
从注册屏幕向登录屏幕生成的链接已损坏(指向/da/sessions/new.customer_user
并点击它我收到ActionController::UnknownFormat in SessionsController#new
错误)
当我直接访问登录页面/da/customer_users/sign_in
并提交表单时,它会向/da/sessions/customer_user
路径发送一个POST,以No route matches
错误结束。
我尝试将这些覆盖添加到设计路线中,但它们仍然无法正常工作。
devise_for :customer_users do
match 'sessions/customer_user', to: 'devise/sessions#create', via: :post
match 'sessions/customer_user', to: 'devise/sessions#new', via: :get
end
我可以确认评论此路线可以解决问题,但我仍然希望旧路线能够正常工作:
# resources :sessions, :only => [:new, :create, :destroy]
设计创建的路线如下:
new_customer_user_session_da_path GET /da/customer_users/sign_in(.:format) devise/sessions#new {:locale=>"da"}
customer_user_session_da_path POST /da/customer_users/sign_in(.:format) devise/sessions#create {:locale=>"da"}
destroy_customer_user_session_da_path DELETE /da/customer_users/sign_out(.:format) devise/sessions#destroy {:locale=>"da"}
之前的设置(不是设计)是创建这些路线:
sessions_da_path POST /da/sessions(.:format) sessions#create {:locale=>"da"}
new_session_da_path GET /da/sessions/new(.:format) sessions#new {:locale=>"da"}
session_da_path DELETE /da/sessions/:id(.:format) sessions#destroy {:locale=>"da"}
我还观察到设计创建的视图使用了这个帮助器:
session_path(resource_name)
我很难理解它在正常的Rails路由和设计路由方面是如何工作的(见上文)。
如何更改Devise的设置,以便新会话路由与现有路由不冲突?