Symfony security.yml要求\u通道似乎被忽略

Symfony security.yml要求\u通道似乎被忽略,symfony,https,Symfony,Https,在Acme应用程序的基本symfony安装中,我更改了/app/config/security.yml以强制登录表单使用https: access_control: - { path: ^/demo/secured/hello/admin/, roles: ROLE_ADMIN } - { path: ^/demo/secured/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 然后当我

在Acme应用程序的基本symfony安装中,我更改了/app/config/security.yml以强制登录表单使用https:

access_control:
    - { path: ^/demo/secured/hello/admin/, roles: ROLE_ADMIN }
    - { path: ^/demo/secured/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
然后当我请求登录表单时:
http://localhost/app_dev.php/demo/secured/login
我没有被重定向到https。根据以下文档,希望它重定向到https:


也许我需要删除缓存,但请求
http://localhost/app_dev.php/demo/secured/login?refresh=123
也没有将我转发到https。

几天前我也有类似的需求,我不得不更改
routing.yml
文件。我就是这样解决的:

routing.yml


虽然我确实使用了
FOSUserBundle
,但这应该适用于任何路由配置。

您也可以通过注释(即:


如果上面的问题没有显示所有访问控制声明,这里有另一种可能的解释:

如果访问控制声明按此顺序出现

access_control:
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
。。。url为,则RequestMatcher.matches()将停止搜索“^/”之后的声明,因为preg_match报告“^/”匹配“^/login”。然后使用的协议将是http

但如果声明被推翻

access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }

。。。然后RequestMatcher.matches()将停止在“^/login”之后搜索声明,然后使用的协议将是https

谢谢您的回复。你是说security.yml和requires_频道根本不起作用,而搜索
symfony force https
时在谷歌上点击nr1的文档也不起作用?我想我可以在谷歌上使用nr2并更换路由器,但我想知道为什么security.yml没有做它应该做的事情。坦率地说,我也在谷歌上搜索了类似的条件,并首先找到了这个解决方案。此外,我现在看到,您链接到的文档(单独的超链接)的底部也描述了此方法。我看到它适用于
{path:^/demo/secured/hello/admin/,roles:ROLE\u admin,requires\u channel:https}
请求该页面会永久移动301。我猜这是你和Symfony一起工作一段时间后会发现的有趣的事情之一(如果在此之前你没有跳楼的话)。
access_control:
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }