Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为Desive定制每个成功/失败的flash消息_Ruby On Rails_Devise - Fatal编程技术网

Ruby on rails 为Desive定制每个成功/失败的flash消息

Ruby on rails 为Desive定制每个成功/失败的flash消息,ruby-on-rails,devise,Ruby On Rails,Devise,我正在尝试根据用户会话成功或失败登录生成不同外观的flash消息。(主要通过改变jped图像) 我有一个处理flash消息的局部视图,检查钥匙,然后显示不同的图像: \u flash\u message.html.erb <% if flash.present? %> <% case flash.first[0] %> <% when "devise_deconnexion" %> <div id="flash-message

我正在尝试根据用户会话成功或失败登录生成不同外观的flash消息。(主要通过改变jped图像)

我有一个处理flash消息的局部视图,检查钥匙,然后显示不同的图像:

\u flash\u 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>

...
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
它工作得很好

虽然我很难在用户输入错误密码的情况下更改图像。我不知道在哪里修改闪光键

以下是设计会话#从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
消息一起使用


我看不出“错误的密码或用户名”的闪烁消息是在哪里触发的(尽管当输入错误的密码时,我确实会收到一条闪烁消息)

当用户输入错误的密码时,控制器中的代码执行会在这一行停止:

self.resource = warden.authenticate!(auth_options)
之后,失败的请求由所谓的“设计失败应用程序”处理

您可以用自己定制的应用程序替换该故障应用程序

1) 创建自定义故障应用程序:

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

如何定制Desive的Failure应用程序以实现您的目标是由您自己来决定的。祝你好运

非常感谢。我将覆盖涉及flash消息的方法。您是否建议将自定义失败应用程序存储在/lib文件夹中?是否有任何方法打印失败应用程序发送的消息!来自FailureApp的(‘我的消息’)呼叫?
# initializers/devise.rb
Devise.setup do |config|
  config.warden do |manager|
    manager.failure_app = CustomFailureApp
  end
end