Ruby on rails 3 设计不重定向到自定义路由无效尝试上的登录页

Ruby on rails 3 设计不重定向到自定义路由无效尝试上的登录页,ruby-on-rails-3,routing,devise,Ruby On Rails 3,Routing,Devise,使用Desive和custom routes,每当用户有无效的登录尝试(错误通过)时,Rails就不会重定向回登录页面。如果我不使用自定义路由,那么它可以正常工作。我做错了什么 目标:我想使用/sign而不是/users/sign\u登录 routes.rb: devise_for :users, :controllers => { :sessions => "user_sessions" },:skip => [:sessions] do get 'signin' =&

使用Desive和custom routes,每当用户有无效的登录尝试(错误通过)时,Rails就不会重定向回登录页面。如果我不使用自定义路由,那么它可以正常工作。我做错了什么

目标:我想使用/sign而不是/users/sign\u登录

routes.rb:

devise_for :users, :controllers => { :sessions => "user_sessions" },:skip => [:sessions] do
   get 'signin' => 'user_sessions#new', :as => :new_user_session
   post 'signin' => 'user_sessions#create', :as => :user_session
   delete 'signout' => 'user_sessions#destroy', :as => :destroy_user_session
   get 'signout' => 'user_sessions#destroy', :as => :destroy_user_session
end
在UserSessionController/create内部:

resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
使用自定义路由/登录时的服务器输出:

Completed 401 Unauthorized in 2ms
使用默认路由/用户/登录时的服务器输出:

Completed 401 Unauthorized in 2ms
Processing by UserSessionsController#new as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"2gqKTGWPv69HpVp7oSEg2tRDj5FU453my7LhKm0xu7E=", "user"=>{"email"=>"", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"SIGN IN"}
Rendered user_sessions/new.html.erb within layouts/user_sessions (56.6ms)

我知道这个问题在几个月前就已经发布了,但我还是关注了同一个问题,在与之斗争了几个小时之后,我覆盖了Desive SessionController、Desive Custom Failure、debugging through等等,我终于发现了问题的症结所在,我决定分享解决方案,这样你们就不必经历这些了。 错误“Completed 401 Unauthorized in XXms”发生在位于lign:resource=build_resource(…)的SessionController的创建方法中。由于资源未传递给服务器,因此无法生成资源。现在问题在于为什么资源没有传递给服务器?我使用的是JQUERY mobile,它将登录作为AJAX调用发布,JQUERY无法通过AJAX上传这样的数据。 您需要在登录表单中添加数据ajax=false: 在designe/sessions/new.html.erb中,修改表单如下所示:

form_for(resource, :as => resource_name, :url => user_session_url, html: {data: {ajax: false}}) do |f|

希望这对以后的人有所帮助。

我知道这个问题在几个月前就已经发布了,但我还是关注了同一个问题,在与之斗争了几个小时后,我覆盖了designe SessionController、designe Custom Failure、调试通过等等。。,我终于发现了发生的事情,我决定分享解决方案,这样你们就不必经历这些了。 错误“Completed 401 Unauthorized in XXms”发生在位于lign:resource=build_resource(…)的SessionController的创建方法中。由于资源未传递给服务器,因此无法生成资源。现在问题在于为什么资源没有传递给服务器?我使用的是JQUERY mobile,它将登录作为AJAX调用发布,JQUERY无法通过AJAX上传这样的数据。 您需要在登录表单中添加数据ajax=false: 在designe/sessions/new.html.erb中,修改表单如下所示:

form_for(resource, :as => resource_name, :url => user_session_url, html: {data: {ajax: false}}) do |f|
希望这对以后的人有所帮助。

替换:

<%= form_for(resource, :as => resource_name, :url => admin_session_path(resource_name)) do |f| %>
resource_name,:url=>admin_session_path(resource_name))do | f |%>
与:

resource_name,:url=>admin_session_path)do | f |%>
在sessions/new.html.erb文件中,该文件对我有效。

替换:

<%= form_for(resource, :as => resource_name, :url => admin_session_path(resource_name)) do |f| %>
resource_name,:url=>admin_session_path(resource_name))do | f |%>
与:

resource_name,:url=>admin_session_path)do | f |%>

在sessions/new.html.erb文件中,我找到了答案。

你找到了答案吗?你找到了答案吗?