我有一个相当简单的应用程序,使用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
我不确定我需要设置什么才能允许授权和/或如何获取更详细的日志以确切了解未经授权的内容?如果我输入有效凭据,我可以访问该应用程序,并且应用程序的所有其他部分都按预期工作。
答案 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|
希望能帮助有人在路上。