设计登录错误不显示

moo*_*isy 1 ruby ruby-on-rails devise

我一直在研究类似的问题,但无法找出我的错误。

\n\n

我的 中有这段代码application.html.erb,它在显示其他闪存消息(例如“成功登录”)时起作用:

\n\n
<% flash.each do |name, msg| %>\n  <% if msg.is_a?(String) %>\n    <div class="alert alert-dismissible alert-<%= name.to_s == \'notice\' ? \'success\' : \'danger\' %>">\n      <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>\n      <%= content_tag :div, msg, :id => "flash_#{name}" %>\n    </div>\n  <% end %>\n<% end %>\n
Run Code Online (Sandbox Code Playgroud)\n\n

但无论如何,登录我的任何型号时都不会显示错误(我有 3 个不同的型号)。

\n\n

这是请求的响应:

\n\n
Started POST "/users/sign_in" for 127.0.0.1 at 2017-10-14 16:25:35 -0300\nProcessing by Users::SessionsController#create as HTML\n  Parameters: {"utf8"=>"\xe2\x9c\x93", "authenticity_token"=>"5yM5EkGw1WVrFsaHm39Em7JkXgu0OZb5FDeO7bJA+SEQBYBybfw7ghbK1WM5I8krbBjP/pRWLF+PG0B2k+Crkw==", "user"=>{"email"=>"user0@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Iniciar sesi\xc3\xb3n"}\n  User Load (1.0ms)  SELECT  "users".* FROM "users" WHERE "users"."email" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["email", "user0@gmail.com"], ["LIMIT", 1]]\nCompleted 401 Unauthorized in 107ms (ActiveRecord: 5.0ms)\n\n\nProcessing by Users::SessionsController#new as HTML\n  Parameters: {"utf8"=>"\xe2\x9c\x93", "authenticity_token"=>"5yM5EkGw1WVrFsaHm39Em7JkXgu0OZb5FDeO7bJA+SEQBYBybfw7ghbK1WM5I8krbBjP/pRWLF+PG0B2k+Crkw==", "user"=>{"email"=>"user0@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Iniciar sesi\xc3\xb3n"}\n  Rendering users/sessions/new.html.erb within layouts/application\n  Rendered users/sessions/new.html.erb within layouts/application (2.0ms)\n  Rendered layouts/_navigation.html.erb (1.0ms)\n  Rendered layouts/_messages.html.erb (0.5ms)\nCompleted 200 OK in 285ms (Views: 223.4ms | ActiveRecord: 0.0ms)\n
Run Code Online (Sandbox Code Playgroud)\n\n

但如果用户/密码错误或用户尚未确认,则闪存为空。

\n\n

我已经重新定义了控制器,以使它们能够针对多个模型正常工作,如wiki中所述

\n\n
class Users::SessionsController < Devise::SessionsController\n  include Accessible\n  skip_before_action :check_user, only: :destroy\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我还没有重新定义这些方法。

\n

小智 5

这个问题被标记为“设计”,所以我假设你正在使用它。设计错误不是闪存消息,也没有实现此机制。看看这个部分devise_error_messages!。您可以将其包含在您的 Devise 表单中。

更新

我将在问题更新后更新我的答案。我创建了一个具有三个 Devise 模型的新应用程序,如所述,并使用问题中的代码片段来生成闪烁。我已按照问题描述中的教程进行操作,并且能够重现您的问题。当用户重定向回新的会话视图时,flash.clear问题中的问题似乎会清除闪烁。

您可以添加以下内容:

flash.clear unless params['action'] == 'new'
Run Code Online (Sandbox Code Playgroud)

作为一种快速破解方法,可以防止重定向回新会话页面时出现闪烁清除。