rails 3.1.0 с канком, получившим несанкционированный доступ с неверным именем пользователя и / или паролем - PullRequest
1 голос
/ 10 февраля 2012

У меня довольно простое приложение, использующее 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 Ответ

1 голос
/ 05 июня 2012

Я знаю, что этот вопрос был опубликован пару месяцев назад, но я решил ту же проблему, и после нескольких часов борьбы с ней, перезаписи Devise SessionController, Devise Custom Failure, отладки и т. Д., Я наконец-то узнал, чтои я решил поделиться решением, чтобы вам, ребята, не пришлось проходить через это.

Ошибка 'Completed 401 Unauthorized in XXms' возникает в методе create SessionController в строке:

resource =  build_resource(...)

И ресурс не может быть собран, так как ресурс не передан на сервер.Теперь проблема заключается в том, ПОЧЕМУ ресурс не передается на сервер?Я использую мобильный телефон JQUERY, который отправляет sign_in как вызов AJAX, который JQUERY не может загружать в виде данных через AJAX.

Вам необходимо добавить в свою форму входа data-ajax = false: в Devise / сеансах/new.html.erb измените форму, чтобы она выглядела следующим образом:

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

Надеюсь, что это поможет кому-то в будущем.

...