Symfony3 FOSUserBundle:无HTTPS重定向(登录/注销)

时间:2019-05-23 13:17:22

标签: https login url-redirection fosuserbundle symfony3.x

我有一个包含公共和管理区域的Symfony 3.4项目。

当匿名用户尝试访问以/admin开头的页面时,FOSUserBundle会自动重定向到登录页面。

当我的项目使用 HTTP 协议时一切正常,但是现在,该项目完全在 HTTPS 下。

当我尝试访问https://myproject/admin时遇到问题 ->它在http://myproject/login而不是HTTPS上重定向(即使所有URL在HTTPS中自动重定向),我的浏览器也出现此错误:ERR_CONNECTION_REFUSED

如果我直接访问https://myproject/login->可以,但是登录后(重定向到/admin)的重定向也是在HTTP中完成的(并且我再次遇到相同的ERR_CONNECTION_REFUSED错误)。

身份验证有效,因为如果我访问HTTPS中的管理区域,就可以很好地登录。

当我注销时也会发生->它重定向到项目的主页,但使用HTTP而不是HTTPS。

似乎FOSUserBundle管理的每个重定向都是在HTTP中完成的。

因此,我检查了Symfony documentation以对特定URL强制使用HTTPS。我尝试了这个:

// security.yml

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

但是,当我访问/admin时,没有更多重定向到登录页面,并且现在出现此错误:ERR_TOO_MANY_REDIRECTS

所以,我现在不知道该怎么办...

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:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        login:
            pattern:   ^/login$
            anonymous: ~

        main:
            anonymous: true
            pattern:   ^/
            form_login:
                provider:            fos_userbundle
                login_path:          /login
                default_target_path: /admin     # redirect after login

                # csrf token options
                csrf_parameter:       _csrf_token
                csrf_token_id:        authenticate
                csrf_token_generator: security.csrf.token_manager

            logout_on_user_change:    true
            logout:
                path:   /logout
                target: /

            remember_me:
                secret:   '%secret%'
                lifetime: 604800       # 1 week in seconds
                path:     /

    access_control:
        - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_USER }

0 个答案:

没有答案