У меня есть проект 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 }