![](/img/trans.png)
[英]Rails 3, Devise not displaying error message on authentication failure
[英]Rails - Devise sign in / authentication failure does not populate errors array with message
使用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 %>
我在不同的帖子中遇到了另一个问题的答案: 另一个堆栈溢出帖子
我之前尝试输出闪存但没有看到消息,因为我从一个看起来不够的堆栈溢出帖子中跟踪了一些代码。 也就是说,我曾经尝试过:
<%= flash[:message] if flash[:message]
flash[:warning] if flash[:warning]
flash[:error] if flash[:error] %>
Devise没有使用这些密钥登录错误消息,所以这段代码不会给你任何东西。
我发现设计对此的处理是不一致的。 具体来说,如果我选择devise的忘记密码选项并输入一个虚假的电子邮件地址,那么错误会在resource.errors数组中传回,但是这里的错误登录会在flash中传递。
正如您所发现的,Devise不使用flash[:message]
, flash[:warning]
和flash[:error]
。
Devise使用flash[:notice]
和flash[:alert]
。
这在文档中并不容易找到,但仅仅是配置控制器的第三点。
希望这可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.