Symfony 7.1 + EasyAdmin Bundle部署Heroku后部分路由生成HTTP引发CORS错误的解决方法求助
Symfony 7.1 + EasyAdmin Bundle部署Heroku后部分路由生成HTTP引发CORS错误的解决方法求助
大家好,我现在遇到个头疼的问题,想请教下各位大佬。我用Symfony 7.1搭配EasyAdmin Bundle做实体列表和过滤功能,整个应用部署到Heroku后大部分功能都正常,但唯独一个问题:部分URL路由生成用的是HTTPS,另一些却是HTTP。
具体来说,CrudController的链接都是HTTPS的,但有些通过JavaScript发起的请求却生成HTTP链接。举个例子,在CrudController里用过滤器的时候,生成的过滤URL(比如...?crudAction=renderFilters ...)是HTTP的:
http://my-app.herokuapp.com/admin?crudAction=renderFilters&crudControllerFqcn...
这直接导致了CORS错误,因为浏览器的strict-origin-when-cross-origin策略拒绝了跨协议的请求。
我已经尝试过这些方法,但都没解决问题:
- 在
config/packages/routing.yaml里设置参数:parameters: router: request_context.scheme: https - 尝试修改
config/packages/security.yaml里的配置强制HTTPS,但没效果 - 修改
config/routes.yaml给控制器路由指定HTTPS scheme:
结果反而导致无限重定向,路由直接崩了controllers: resource: path: ../src/Controller/ namespace: App\Controller type: attribute schemes: [https] # 新增这一行
后来我调试的时候想到给EasyAdmin Bundle打个补丁,修改EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator文件的第309行附近:
$urlType = null !== $context && false === $context->getAbsoluteUrls() ? UrlGeneratorInterface::RELATIVE_PATH : UrlGeneratorInterface::ABSOLUTE_URL; // 新增这一行强制设置HTTPS $this->urlGenerator->getContext()->setScheme('https'); $url = $this->urlGenerator->generate($this->dashboardRoute, $routeParameters, $urlType);
这么改确实能解决问题,但感觉不是个干净的方案,毕竟改了第三方包的源码,后续升级很麻烦。有没有更优雅的解决办法呢?
备注:内容来源于stack exchange,提问作者codiga
相关产品推荐
相关产品推荐

