Rails 3,设计在身份验证失败时不显示错误消息

时间:2011-02-04 00:17:07

标签: ruby-on-rails authentication devise

我正在使用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

2 个答案:

答案 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