Rails 4:使用before_filter重定向循环

时间:2015-02-14 03:24:48

标签: ruby-on-rails

我正在设置一个非常简单的rails应用程序,它包含一个简单的身份验证检查,然后才能进入该站点。但是,当before_filter运行,并且用户被重定向到登录路径时,会发生重定向循环。

的ApplicationController:

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_filter :check_session

  private

    def check_session
        redirect_to login_path and return unless current_user?
    end

    def current_user?
        !session[:username].blank?
    end

end

SessionsController

class SessionsController < ApplicationController

    def new

    end

end

3 个答案:

答案 0 :(得分:3)

问题是,由于您的SessionsController继承自ApplicationController,因此它实际上也会继承before_filter。这意味着您不允许某人查看登录页面,除非他们已登录,这通常是不受欢迎的行为。您想在登录页面上跳过此before_filter

class SessionsController < ApplicationController
  skip_before_filter :check_session, only: :new

  def new

  end
end

答案 1 :(得分:0)

我认为你的路线有问题。解决方案的一种方法是为您的应用定义根路径:

root 'app_entry#index'

然后为它创建一个控制器,如下所示:

class AppEntryController < ApplicationController

     def index
      if current_user
        redirect_to 'controller_name/action_name'
      else
        redirect_to '/users/sign_in'
     end

end

希望这会对你有所帮助。

答案 2 :(得分:0)

You should use the before filter like this

before_filter :check_session, :except => [:new]