rails 3.1.0设计cancan使用无效的用户名和/或密码进行授权

时间:2012-02-10 04:25:27

标签: ruby-on-rails devise cancan

我有一个相当简单的应用程序,使用devise和cancan进行身份验证和授权。除非用户尝试使用无效的用户名和/或密码登录,否则一切都很有效。发生这种情况时,我们会在日志中收到error loading page以下异常:

Started POST "/users/sign_in" for 127.0.0.1 at 2012-02-09 22:23:22 -0600
  Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"blahblahblahblah", "user"=>{"login"=>"asdasd", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE (lower(username) = 'asdasd' OR lower(email) = 'asdasd') LIMIT 1
Completed 401 Unauthorized in 74ms

我不确定我需要设置什么才能允许授权和/或如何获取更详细的日志以确切了解未经授权的内容?如果我输入有效凭据,我可以访问该应用程序,并且应用程序的所有其他部分都按预期工作。

1 个答案:

答案 0 :(得分:1)

我知道这个问题已经在几个月前发布了但是我热了同样的问题,经过几个小时的斗争,覆盖Devise SessionController,设计自定义失败,调试通过等等,我终于找到了什么正在进行中,我决定分享解决方案,这样你们就不必经历那个。

错误'已完成401未授权在XXms'发生在SessionController的create方法中:

resource =  build_resource(...)

由于资源未传递到服务器,因此无法构建资源。现在问题在于为什么资源没有传递给服务器?我正在使用JQUERY mobile将sign_in发布为AJAX调用,JQUERY无法通过AJAX上传数据。

您需要在登录表单中添加data-ajax = false: 在Devise / sessions / new.html.erb中修改表单如下所示:

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

希望能帮助有人在路上。