我正在为安全性配置新的symfony安装,但我的登录表单不会运行。每当我被重定向到登录页面时,symfony都会重定向到https并将80添加到域中。
这是我的security.yml
# app/config/security.yml
security:
firewalls:
login:
pattern: ^/login
anonymous: true
main:
pattern: ^/
anonymous: false
form_login:
login_path: /login
check_path: /login_check
logout:
path: /logout
target: /home
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: http }
- { path: ^/secure, roles: IS_AUTHENTICATED_FULLY }
- { path: ^/secure/max, roles: ROLE_ADMIN }
providers:
in_memory:
memory:
users:
ryan: { password: ryanpass, roles: 'ROLE_USER' }
admin: { password: kitten, roles: 'ROLE_ADMIN' }
encoders:
Symfony\Component\Security\Core\User\User: plaintext
我的登录路径控制器的路由文件:
login:
pattern: /login
defaults: { _controller: RGCoreBundle:Default:login }
login_check:
pattern: /login_check
当我访问主页时,我被重定向到:
https://myserver.com:80/login
...显然无法正常工作,因为我没有配置SSL ......
我已经尝试更改登录路径的路径,它会更新为指向新路径,所以它肯定会读取配置文件......
我还应该在哪儿看?这是一个全新的安装,我已经消灭了ACME捆绑包。
更新
我正在使用调试器和打印语句潜入内核。
到目前为止,我可以确定它正在执行此操作,因为当身份验证失败时(应该如此),会为“login_path”生成重定向响应。对generateUri的调用调用原始的Request对象'geturi'函数。
跟踪这个,到目前为止的原因是Request对象的ServerBag具有HTTPS =>上。
我还没弄清楚那个设置在哪里。
答案 0 :(得分:3)
(对于nginx)虽然现有答案表明您可以注释掉fascgi_param HTTPS on;
但是,对于某些配置,他们需要指定。更好的解决方案是在网址为https时将其启用,并在网址为关闭时将其关闭。
幸运的是,在nginx配置文件中,$https
设置为" on"如果它是一个安全的端口,并且"关闭"如果它不是。所以这应该有效:
fascgi_param HTTPS $https;
如果您使用的是旧版本的nginx(1.1.11之前版本),则$https
未定义,因此您可以在配置文件中手动执行此操作。
if ($server_port = 443) { set $https on; }
if ($server_port = 80) { set $https off; }
答案 1 :(得分:1)
根据您的安全文件,它似乎不是symfony问题。可能有一些配置,您的Web服务器重定向到https和端口80.如果您无法找到我将在您的项目中执行文件文本搜索“80”并查看是否有任何重定向到该端口和可能https将在同一地点