我正在设置一个非常简单的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
答案 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]