Rails - 设计登录/身份验证失败不会使用消息填充错误数组

时间:2011-08-30 19:42:09

标签: ruby-on-rails ruby login devise

使用Rails 3.07和Devise 1.1.5

一切正常,正如预期的那样,只有一个例外。例如,当用户尝试使用伪造的密码登录时,设计会拒绝登录尝试,这是正确的,但无法提供错误消息。

我在app / helpers / devise_helper.rb中设置了几个错误显示方法,我使用的是一个名为devise_sign_in_error_messages的方法!用于登录视图。因此,在这种情况下,我能够验证该函数的以下行是否返回错误的空字符串:     如果是resource.errors.empty,则返回“”?

如果我提供正确的用户名和密码,系统会将我记录下来,所以所有的设计逻辑似乎都很好,只是缺少错误信息才是一个谜。

我需要更改以帮助设计在登录失败时向我传递错误消息?

编辑:

答案是: a)设计是在闪光灯中坚持答案 b)即使它在闪存中,也没有使用你可能期望的密钥

使用这段代码,我可以看到消息:

<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash_#{name}" if msg.is_a?(String) %>
<% end %>

我在另一篇文章中看到的是对不同问题的回答: Another stack overflow post

我之前曾尝试输出闪存,但没有看到该消息,因为我从一个看起来不够的堆栈溢出帖子中跟踪了一些代码。也就是说,我曾尝试过:

<%= flash[:message] if flash[:message]
flash[:warning] if flash[:warning]
flash[:error] if flash[:error] %>

Devise没有使用这些密钥登录错误消息,所以这段代码不会给你任何东西。

我发现设计对此的处理是不一致的。具体来说,如果我选择devise的忘记密码选项并输入一个伪造的电子邮件地址,那么错误会在resource.errors数组中传回,但是这里的错误登录会在flash中传递。

1 个答案:

答案 0 :(得分:15)

您发现Devise不使用flash[:message]flash[:warning]flash[:error]

设计使用flash[:notice]flash[:alert]

documentation中找不到容易的内容,但在配置控制器的第三点下面。

希望这可以解决问题。

相关问题