遇到错误的无限循环:过滤链停止为:require_no_authentication呈现或重定向

时间:2016-05-10 02:31:54

标签: ruby-on-rails ruby redirect model-view-controller devise

我有两个模型供应商和客户,在应用程序控制器中我为每个模型定义了after_sign_in_path_for方法,但在注册并确认客户后,当我登录时,我重定向到供应商登录页面而不是dashboard_path。是否出现此问题是因为我将两个模型的方法都放在应用程序控制器中,我应该将每个方法放在适当的会话控制器中吗?

我认为错误重定向的原因是无限循环。下面的应用程序控制器代码有什么问题吗? 我只在这个应用程序控制器中编写,其他所有内容都是内置的。

 class ApplicationController < ActionController::Base
    # Prevent CSRF attacks by raising an exception.
    # For APIs, you may want to use :null_session instead.
    protect_from_forgery with: :exception
    before_action :authenticate!

    def after_sign_in_path_for(user)
        if user && user.is_a?(Customer)
            customer_dashboard_path
        elsif user && user.is_a?(Vendor)
            vendor_dashboard_path
        end
    end

    def after_sign_out_path_for(user)
        if user && user.is_a?(Customer)
            root_path
        elsif user && user.is_a?(Vendor)
            root_path
        end
    end

    def after_inactive_sign_up_path_for(user)
        if user && user.is_a?(Customer)
            root_path
        elsif user && user.is_a?(Vendor)
            root_path
        end
    end

  def authenticate!
      if @current_user == current_customer
          :authenticate_customer!
          elsif @current_user == current_vendor
          :authenticate_vendor!
      end
  end

end

1 个答案:

答案 0 :(得分:0)

您使用不同的参数编写两次相同的方法(方法覆盖)。所以它总会选择第二种方法after_sign_in_path_for(vendor)。您可以将方法名称更改为您期望的名称,并相应地调用方法。

 def after_sign_in_path_for_customer(customer)
   dashboard_path
 end

 def after_sign_in_path_for_vendor(vendor)
   dashboard_path
 end

否则你可以有一个像

这样的常用方法
def after_sign_in_path_for(user)
  if user && user.is_a?(Vendor)
     redirect to vendor dashbord
  elsif user && user.is_a?(Customer)
     redirect to customer dash board
  end
end