为什么Warden / Devise在sign_in身份验证失败时追加资源名称?

时间:2012-05-14 23:11:37

标签: ruby-on-rails authentication devise ruby-on-rails-3.2 warden

到目前为止,我一直在谷歌上搜索疯狂而且没有运气。

到目前为止,sign_in和sign_out工作正常。他们重定向到正确的行动。我的问题是sign_in失败时。我被发送到看似空白的html页面,显示“无效的登录名或密码”。由创建操作或由创建操作呈现的文本呈现。 AFAIK 创建只应在失败时重定向或呈现。我有一个自定义控制器,我在这里列出设计代码的唯一原因是查看行为发生的位置。我真的只需要继承此行为,因为我不会在身份验证后尝试重定向到自定义路径。

日志内容如下:

Started POST "/login.user" for 127.0.0.1 at 2012-05-14 15:50:02 -0700
Processing by Users::SessionsController#create as 
Parameters: {"utf8"=>"✓",   "authenticity_token"=>"Pf2+YBqmb5+231nbuD/MeDlz6H7/qOjV4N50WnlJ0rc=", "user"=>{"login"=>"qwdwqqd", "password"=>"[FILTERED]", "remember_me"=>"0"}, "x"=>"40", "y"=>"8"}
Completed 401 Unauthorized in 32ms

这是我的控制器:

Users::SessionsController < ::Devise::SessionsController

def create
  resource = warden.authenticate!(auth_options)
  set_flash_message(:notice, :signed_in) if is_navigational_format?
  sign_in(resource_name, resource)
  respond_with resource, :location => after_sign_in_path_for(resource)
end

我的路线如下:

devise_for :users, :controllers => {:sessions => "users/sessions", :registrations => "users/registrations"}, :path => '', :path_names => { :sign_in => 'login', :sign_out => 'logout' }
.
.
root :to => 'root#index'

我确定它没有超越

resource = warden.authenticate!(auth_options)

认证失败后的行

看起来像warden失败后,资源名称会以某种方式附加到登录路径。 例如/login.user而不仅仅是/ login

任何帮助将不胜感激,提前谢谢。

Rails 3.2,Devise 2.0.4,rack(1.4.1),ruby 1.9.3

1 个答案:

答案 0 :(得分:0)

以防万一其他人还在想。我删除了create_user_session表单中的resource参数。换句话说,我离开了这个:

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

到此:

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

这就是诀窍。因为不早点看这里我觉得很傻。