1

我一直在疯狂地搜索这个,到目前为止还没有运气。

到目前为止 sign_in 和 sign_out 工作正常。他们重定向到正确的行动。我的问题是登录失败时。我被发送到一个看起来像空白的 html 页面,显示“无效的登录名或密码”。由create 操作呈现或由 create操作呈现的文本。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)

身份验证失败时的线路

资源名称似乎在监狱长失败时以某种方式附加到登录路径。例如 /login.user 而不是 /login

任何帮助将不胜感激,在此先感谢。

Rails 3.2、Devise 2.0.4、机架 (1.4.1)、ruby 1.9.3

4

1 回答 1

0

以防万一其他人仍然想知道。我删除了 create_user_session 表单中的资源参数。换句话说,我从这个出发:

<%= 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| %>

那成功了。不早点看这里,我觉得很愚蠢。

于 2012-05-23T16:58:53.343 回答