Symfony3 FOSUserBundle: нет перенаправления HTTPS (вход / выход) - PullRequest
0 голосов
/ 23 мая 2019

У меня есть проект 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 , чтобы принудительно установить HTTPS для определенных URL-адресов. Я попробовал это:

// 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 }
...