2

我正在为安全性配置新的 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 的调用调用原始请求对象的“geturi”函数。

跟踪这个,到目前为止的原因是 Request 对象的 ServerBag 有 HTTPS => on。

不过,我还没有弄清楚该设置在哪里。

4

2 回答 2

4

(对于 nginx)虽然现有答案表明您可以注释掉fascgi_param HTTPS on;但是,对于某些配置,他们需要该名称。更好的解决方案是在 url 为 https 时将其打开,并在不是时将其关闭。

幸运的是,在 nginx 配置文件中,$https如果它是安全端口,则设置为“on”,如果不是,则设置为“off”。所以这应该工作:

fascgi_param HTTPS $https;

如果您使用的是旧版本的 nginx(1.1.11 之前),$https则未定义,因此您可以在配置文件中手动执行此操作。

if ($server_port = 443) { set $https on; }
if ($server_port = 80) { set $https off; }
于 2015-03-03T01:51:31.417 回答
1

根据您的安全文件,它似乎不是 symfony 问题。您的网络服务器可能有一些配置正在重定向到 https 和端口 80。如果您找不到我会在您的项目中搜索“80”的文件文本并查看是否有任何东西将您重定向到该端口和https可能会在同一个地方

于 2013-10-16T20:15:45.450 回答