Rails访问登录页提示重定向次数过多错误如何解决?
问题原因
你在全局父控制器ApplicationController中定义了无豁免规则的前置回调do_atthestart,所有继承自ApplicationController的控制器(包括负责渲染登录页的SessionsController)都会在执行任意动作前触发该回调。当你访问登录页时,回调逻辑直接要求跳转到登录页,形成无限重定向循环,最终浏览器触发重定向次数过多的报错。
修复方案
- 方案1:在登录控制器中跳过全局前置回调
在SessionsController中主动跳过该全局重定向校验,代码示例:
class SessionsController < ApplicationController # 仅豁免登录相关动作的全局校验 skip_before_action :do_atthestart, only: [:new, :create] def new # 原有登录页渲染逻辑 end def create # 原有登录凭证校验逻辑 end end
- 方案2:给全局重定向逻辑增加豁免条件
直接修改ApplicationController的回调方法,识别到当前请求为登录相关逻辑时不触发重定向:
class ApplicationController < ActionController::Base before_action :do_atthestart protected def do_atthestart # 豁免登录相关路由,避免循环跳转 return if controller_name == 'sessions' && ['new', 'create'].include?(action_name) redirect_to login_path end end
- 优化建议
后续如果实现了用户登录态判断逻辑,可以在重定向前增加登录态校验,仅未登录用户才触发跳转:
def do_atthestart # 已登录用户直接放行 return if user_signed_in? # 未登录用户豁免登录相关路由 return if controller_name == 'sessions' && ['new', 'create'].include?(action_name) redirect_to login_path end
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

