Я пытаюсь генерировать различные флеш-сообщения в зависимости от того, успешен ли пользовательский сеанс или не удалось войти в систему.(В основном, путем изменения изображения jped)
У меня есть частичное представление, обрабатывающее флэш-сообщения, и проверяю ключ, а затем отображаю другое изображение:
_flash_message.html.erb
<% if flash.present? %>
<% case flash.first[0] %>
<% when "devise_deconnexion" %>
<div id="flash-message">
<div id="image">
<%= image_tag "deconnecte.svg" %>
</div>
<div id="affiche">
<div id="message">
<h1>Succès</h1>
<h2><%= flash.first[1] %></h2>
</div>
<div id="check" style="background-color: #00e691;">
<%= image_tag "check_blanc.svg" %>
</div>
</div>
</div>
...
В приведенном выше бите я проверяю, совпадает ли ключ со строкой «devise_deconnexion», чтобы показать другое изображение во флэш-сообщении.
Я смог настроить это, сгенерировав контроллер сессий devise для каждой модели Devise и изменив его, как показано ниже:
session_controller.rb
def destroy
# super
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
set_flash_message! :devise_deconnexion, :signed_out if signed_out
yield if block_given?
respond_to_on_destroy
end
Отлично работает.
Хотя мне трудно сменить изображение в случае, если пользователь вводит неправильный пароль.Я не знаю, где изменить флэш-ключ.
Вот сеансы Devise # create code, взятые из github:
# POST /resource/sign_in
def create
self.resource = warden.authenticate!(auth_options)
set_flash_message!(:notice, :signed_in)
sign_in(resource_name, resource)
yield resource if block_given?
respond_with resource, location: after_sign_in_path_for(resource)
end
Я вижу только ключ :notice
, который используется с сообщением :signed_in
.
Я не вижу, где срабатывает флэш-сообщение "неправильный пароль или имя пользователя" (хотя я действительно получаю флэш-сообщение при вводе неправильного пароля)