我正在使用Rails 3和Devise。
我在{rails_root} /lib/custom_failure.rb中有这个,以及我的Devise初始化程序中所需的加载代码。
class CustomFailure < Devise::FailureApp
def redirect_url
root_path
end
def respond
if http_auth?
http_auth
else
redirect_to root_url
end
end
end
加载文件,并在身份验证失败时将用户重定向到root_url。问题是验证失败时没有显示错误消息,但所有其他设计消息都正常工作(成功登录等)。
我的应用程序布局中有这个
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash_#{name}" %>
<% end -%>
编辑: 最终的工作代码。原来我最大的错误就是没有重新启动服务器。 CustomFailure是一个lib,只加载一次。
def respond
if http_auth?
http_auth
else
flash[:notice] = "Error message goes here"
redirect_to root_url
end
end
答案 0 :(得分:2)
可能是Flash消息被重定向吃掉了吗?闪存仅适用于下一个请求,因此重定向可能是获取闪存消息,但它在下一个请求(root_url
)中消失了。您可能需要进行内部重定向或将闪存变量传递给下一个请求。
我可以问你为什么要在失败时进行外部重定向,而不是仅仅使用错误消息再次显示登录表单?
答案 1 :(得分:2)
您还可以在响应操作中添加flash[:alert]
:
class CustomFailure < Devise::FailureApp
def redirect_url
root_url
end
def respond
if http_auth?
http_auth
else
flash[:alert] = i18n_message unless flash[:notice]
redirect_to root_url
end
end
end