You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重定向路由触发无限循环,寻求技术解决方案

解决重定向路由无限循环问题

嘿,我来帮你搞定这个无限重定向的坑!

你遇到的这个循环问题,根源其实很清晰:你的onKernelRequest监听器会拦截每一个请求,包括你重定向过去的accept_路由。也就是说,当用户被跳转到接受条件的页面时,监听器又会检查到用户还没接受条件,再次把他重定向回去,这样就形成了死循环。

解决方案:排除目标路由

我们只需要在判断逻辑里加一个例外——当用户当前访问的就是accept_路由时,不执行重定向操作。修改你的onKernelRequest方法如下:

/**
 * To checked all the routes
 *
 * @param GetResponseEvent $event
 */
public function onKernelRequest(GetResponseEvent $event) {
    // 先获取当前请求的路由名称
    $currentRoute = $event->getRequest()->attributes->get('_route');
    
    // 如果当前已经是接受条件的路由,直接跳过
    if ($currentRoute === 'accept_') {
        return;
    }

    $user = $this->tokenStorage->getToken()->getUser();
    if ($this->role->isGranted('ROLE_USER') && !$this->userManager->hasAccepted($user) ) {
        $this->redirect = $this->router->generate('accept_');
        $event->setResponse(new RedirectResponse($this->redirect));
    }
}

额外优化建议

  • 如果你以后可能需要排除多个路由,可以把这些路由名称放到一个配置数组里(比如在服务定义里注入),这样不用每次改代码:
    // 假设你注入了$excludedRoutes数组
    if (in_array($currentRoute, $this->excludedRoutes)) {
        return;
    }
    
  • 记得测试hasAccepted方法的逻辑,确保用户完成条件接受后,这个方法能正确返回true,避免用户接受后还被重定向。

内容的提问来源于stack exchange,提问作者waner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:12:58