Настройка флеш-сообщений на успех / неудачу для Devise - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь генерировать различные флеш-сообщения в зависимости от того, успешен ли пользовательский сеанс или не удалось войти в систему.(В основном, путем изменения изображения 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.

Я не вижу, где срабатывает флэш-сообщение "неправильный пароль или имя пользователя" (хотя я действительно получаю флэш-сообщение при вводе неправильного пароля)

1 Ответ

1 голос
/ 30 апреля 2019

Когда пользователь вводит неправильный пароль, выполнение кода в контроллере останавливается на этой строке:

self.resource = warden.authenticate!(auth_options)

После этого неудавшийся запрос обрабатывается так называемым «приложением Devise Failure».

https://github.com/plataformatec/devise/blob/master/lib/devise/failure_app.rb

Вы можете заменить это приложение Failure своим собственным, настроенным пользователем.

1) Создать пользовательское приложение ошибки:

class CustomFailureApp < Devise::FailureApp
    # your custom code goes here ....
end

2) TellРазработайте для использования свое пользовательское приложение для отказов

# initializers/devise.rb
Devise.setup do |config|
  config.warden do |manager|
    manager.failure_app = CustomFailureApp
  end
end

Как настроить приложение отказов Devise для достижения ваших целей, вы должны выяснить.Удачи!

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