Rails - разработка входа / ошибка аутентификации не заполняет массив ошибок сообщением - PullRequest
8 голосов
/ 30 августа 2011

Использование Rails 3.07 и Devise 1.1.5

Все работает нормально и, как и ожидалось, с одним исключением.Например, когда пользователь пытается войти с поддельным паролем, devise запрещает попытку входа, что является правильным, но не выдает сообщение об ошибке.

У меня есть несколько методов отображения ошибок, настроенных в app / helpers / devise_helper.rb, и я использую один метод с именем devise_sign_in_error_messages!для входа в систему.Поэтому я могу проверить, что следующая строка из этой функции возвращает пустую строку для ошибок в этом случае: return "" if resource.errors.empty?

Если я даю правильное имя пользователя и пароль,система регистрирует меня просто отлично, так что вся логика устройства выглядит хорошо, только это отсутствие сообщения об ошибке является загадкой.

Что мне нужно изменить, чтобы помочь устройству передать мне сообщение об ошибке при сбоеавторизоваться?

РЕДАКТИРОВАТЬ:

Ответ таков: а) устройство прикрепляет ответ во флэш-памяти б) даже если оно находится во флэш-памяти, оно не использует клавишу, которую можно ожидать

Используя этот кусочек кода, я вижу сообщение:

<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash_#{name}" if msg.is_a?(String) %>
<% end %>

С которым я столкнулся в другом посте в качестве ответа на другой вопрос: Еще один пост переполнения стека

Я пытался вывести флэш-память ранее, но не видел сообщения, потому что я следовал за небольшим количеством кода из другого сообщения о переполнении стека, которое кажется недостаточным.А именно, я пытался:

<%= flash[:message] if flash[:message]
flash[:warning] if flash[:warning]
flash[:error] if flash[:error] %>

Devise не использует эти ключи для сообщения об ошибке входа в систему, поэтому этот код ничего вам не даст.

Я нахожу, что разработка этого устройства противоречива.В частности, если я выберу опцию забытого пароля устройства и введу, например, фиктивный адрес электронной почты, ошибка передается обратно в массив resource.errors, но здесь при неправильном входе в систему она передается во флэш-памяти.

1 Ответ

15 голосов
/ 06 апреля 2012

Как вы обнаружили, Devise не использует flash[:message], flash[:warning] и flash[:error].

Devise использует flash[:notice] и flash[:alert].

Это не простонайдите в документации , но чуть ниже третьего пункта в Настройка контроллеров .

Надеюсь, это все прояснит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...