【发布时间】:2017-11-12 21:38:30
【问题描述】:
我的问题就像标题一样。
在我的项目中,我尝试将 HTTPS 添加到 /login 和 /admin 路由。两个路由都是从第三方包中导入的:从 FOSUserBundle 登录和从 EasyAdminBundle 进行管理。为了实现这一点,我将requires_channel: https 添加到security.yml 文件中,就像在这个线程https://symfony.com/doc/current/security/force_https.html 中描述的那样。
我的access_control 部分看起来像:
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN, requires_channel: https }
我通过内置服务器启动了该站点,以检查它是否会强制 https 连接,并且确实如此。显然有一个错误,因为 symfony 内置服务器不支持 ssl 连接,但在地址栏中有https://。我将此版本上传到服务器,我想继续开发下一个功能,所以我删除了 requires_channel 条目,但是当我通过键入 php bin/console server:start 0.0.0.0:80 并在浏览器地址栏中键入 localhost/admin 来启动页面时,交响乐仍然有效HTTPS。我的下一个猜测是将requires_channel: https 更改为requires_channel: http,但这也不起作用。
在生产服务器上也会发生同样的情况,即当requires_channel 被删除或设置为 HTTP 时,HTTPS 仍然强制执行,但我可以忍受,因为最后我将不得不在 apache 中生成证书并启动 ssl 连接配置文件,但我不能在开发版本上工作。
我寻找了类似的问题,但主要是如果线程是关于 symfony 和 HTTP 或 HTTPS,人们会问如何强制 HTTPS,但我已经这样做了。我找不到与我类似的问题,所以如果有人知道出了什么问题,请随时回复,或者如果有人已经解决了我的问题或非常类似的问题,请粘贴链接。
security.yml文件全文:
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
logout: true
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: "%router.request_context.scheme%" }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN, requires_channel: "%router.request_context.scheme%" }
【问题讨论】: