繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM