在Devise

时间:2018-05-07 11:18:24

标签: ruby-on-rails authentication devise routes

我在现有的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的设置,以便新会话路由与现有路由不冲突?

0 个答案:

没有答案