我网站的用户必须首先登录才能看到它的每一页。我当前的解决方案在浏览器中导致“太多重定向”错误消息,我怀疑出现了问题所以它无休止地来回走动,但在哪里呢?
在应用程序控制器中我有:
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
感谢您的帮助!
答案 0 :(得分:2)
您的before_filter
对每项操作都有效(因为它位于ApplicationController
内),因此也适用于您的sessions#new
操作。这意味着您甚至无法进入登录操作。我建议您将before_filter
放在每个需要的控制器中,并使用before_filter :authenticate_user, :except => [:new, :create, :destroy]
或您需要的任何内容指定操作。