创建新会话时重定向过多

时间:2011-11-16 12:32:52

标签: ruby-on-rails

我网站的用户必须首先登录才能看到它的每一页。我当前的解决方案在浏览器中导致“太多重定向”错误消息,我怀疑出现了问题所以它无休止地来回走动,但在哪里呢?

在应用程序控制器中我有:

before_filter :authenticate_user

def authenticate_user
  unless session[:user_id]
    flash[:alert] = I18n.t :session_unauthenticated
    redirect_to login_path
  end
end

“login_path”转到“sessions / new”,如下所示:

    def new
      user = User.find_by_email(params[:email])
      if user && user.authenticate(params[:password])
        session[:user_id] = user.id
        redirect_to root_url, :notice => I18n.t(:session_logged_in)
      else
        flash.now.alert = I18n.t(:session_invalid)
        render "new"
      end  
    end

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您的before_filter对每项操作都有效(因为它位于ApplicationController内),因此也适用于您的sessions#new操作。这意味着您甚至无法进入登录操作。我建议您将before_filter放在每个需要的控制器中,并使用before_filter :authenticate_user, :except => [:new, :create, :destroy]或您需要的任何内容指定操作。