ruby-on-rails - 设计未显示的 log_in 错误

标签 ruby-on-rails ruby devise

我一直在寻找类似的问题,但无法查明我的错误。

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

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

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

这是请求的响应:

Started POST "/users/sign_in" for 127.0.0.1 at 2017-10-14 16:25:35 -0300
Processing by Users::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"5yM5EkGw1WVrFsaHm39Em7JkXgu0OZb5FDeO7bJA+SEQBYBybfw7ghbK1WM5I8krbBjP/pRWLF+PG0B2k+Crkw==", "user"=>{"email"=>"user0@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Iniciar sesió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]]
Completed 401 Unauthorized in 107ms (ActiveRecord: 5.0ms)


Processing by Users::SessionsController#new as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"5yM5EkGw1WVrFsaHm39Em7JkXgu0OZb5FDeO7bJA+SEQBYBybfw7ghbK1WM5I8krbBjP/pRWLF+PG0B2k+Crkw==", "user"=>{"email"=>"user0@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Iniciar sesión"}
  Rendering users/sessions/new.html.erb within layouts/application
  Rendered users/sessions/new.html.erb within layouts/application (2.0ms)
  Rendered layouts/_navigation.html.erb (1.0ms)
  Rendered layouts/_messages.html.erb (0.5ms)
Completed 200 OK in 285ms (Views: 223.4ms | ActiveRecord: 0.0ms)

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

我已经重新定义了我的 Controller ,让它们在多个模型中正常工作,如 wiki 中所述。

class Users::SessionsController < Devise::SessionsController
  include Accessible
  skip_before_action :check_user, only: :destroy
end

但我没有重新定义方法。

最佳答案

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

更新

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

您可以添加以下内容:

flash.clear unless params['action'] == 'new'

作为防止在重定向回新 session 页面时清除 flash 的快速 hack。

关于ruby-on-rails - 设计未显示的 log_in 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46626586/

相关文章:

ruby - 为什么 Ruby 的 'gets' 包含结束换行符?

ruby-on-rails - accepts_nested_attributes_for 和belongs_to 多态设计

ruby-on-rails - 前缀或 URL 的一部分

ruby-on-rails - Rails AR 日期范围查询 - 夏令时 - 重叠

ruby - 数组的最长公共(public)前缀和后缀

ruby-on-rails - rails : Cookie overflow with omniauth twitter sign up

ruby-on-rails - Safari 无法使用 Devise 和 Rails 4 登录

ruby-on-rails - 向 rails 添加一列(Ubuntu)

ruby-on-rails - 如何在 Rails 6 中使用 Webpacker 跨多个客户端 JavaScript 文件共享变量和函数?

ruby - 使用 Rspec 共享示例来测试 Ruby 类的属性