到目前为止,我一直在谷歌上搜索疯狂而且没有运气。
到目前为止,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
答案 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| %>
这就是诀窍。因为不早点看这里我觉得很傻。