使用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://symfony.com/doc/current/cookbook/security/force_https.html
也许我需要删除缓存,但请求http://localhost/app_dev.php/demo/secured/login?refresh=123
也不会将我转发给https。
答案 0 :(得分:2)
前几天我有类似的需求,我不得不改变routing.yml
档案。这就是我解决它的方法:
的的routing.yml 强>
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
schemes: [https]
虽然我确实使用了FOSUserBundle
,但这应该适用于任何路由配置....
答案 1 :(得分:2)
如果上面的问题没有显示access_control声明的全部,那么这是另一个可能的解释:
如果access_control声明按此顺序出现......
access_control:
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
...并且url是http://foo.com/login,然后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 。
答案 2 :(得分:1)
您也可以通过注释(即)
来完成此操作@Route("/checkout", name="cart_checkout", schemes={"https"})