【问题标题】:rails 3.1.0 devise with cancan getting unauthorized with invalid username and/or passwordrails 3.1.0 design with cancan 使用无效的用户名和/或密码未经授权
【发布时间】:2012-02-10 04:25:26
【问题描述】:

我有一个相当简单的应用程序,它使用 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

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

【问题讨论】:

  • 你终于知道是怎么回事了吗?

标签: ruby-on-rails devise cancan


【解决方案1】:

我知道这个问题已经在几个月前发布了,但我也遇到了同样的问题,经过几个小时的斗争,覆盖了 Devise SessionController、Devise Custom Failure、调试等,我终于发现了什么正在继续,我决定分享解决方案,这样你们就不必经历那个了。

在 SessionController 的 create 方法中出现错误“Completed 401 Unauthorized in XXms”:

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|

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

【讨论】:

  • Yohann T. 这个问题与 cancan、devise 或两者有关吗?你能告诉我更多关于你遇到的问题吗,我可能有同样的问题
猜你喜欢
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多