使用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中传递。
答案 0 :(得分:15)
您发现Devise不使用flash[:message]
,flash[:warning]
和flash[:error]
。
设计使用flash[:notice]
和flash[:alert]
。
在documentation中找不到容易的内容,但在配置控制器的第三点下面。
希望这可以解决问题。