#symfony #security #authentication #environment
Вопрос:
У меня установлена symfony 5.3 с 2 поставщиками безопасности.
Если я использую среду разработки, я могу войти в систему с помощью пользователей обоих поставщиков, но когда я изменяю среду для ТЕСТИРОВАНИЯ или ПОДДЕРЖКИ, я могу войти только с помощью одного из них.
Если я добавлю ведение журнала в свой аутентификатор, я увижу, что в обоих случаях я достигаю функции onAuthorizationSuccess с нужным пользователем, но если я нахожусь на ТЕСТИРОВАНИИ или ПРОДЛЕНИИ, страница, которую я вижу, снова является страницей входа. Если я переключаюсь между средами, я могу повторить поведение в любое время: разработайте ок, протестируйте и попросите не переходить со страницы входа в систему для одного из поставщиков. Другой в порядке во всех ситуациях.
Я понимаю, что Symfony работает над разработкой иначе, чем над тестированием или разработкой, но я не могу понять, в чем разница.
В журналах нет ошибок, и у меня есть кэш:очистите несколько раз..
Есть ли какой-нибудь способ отладить это поведение?
Поведение полностью меняется, если я нахожусь в среде разработки или ТЕСТИРОВАНИЯ/РАЗРАБОТКИ. Тестовая среда использует .env.тестовую копию .env.dev, поэтому это не должно влиять на результат.
Если я изменю .env, чтобы использовать DEV и очистить кэш, это сработает: 2 типа пользователей могут войти в систему, если я изменю .env, чтобы использовать, например, ТЕСТ и снова очистить кэш, это не сработает…
Моя безопасность.yaml (соответствующие части):
security:
chain_provider:
chain:
providers: [app_user_provider, sec_user_provider]
app_user_provider:
entity:
class: AppEntityWebUser
property: login
sec_user_provider:
entity:
class: AppEntitySecurityUser
property: login
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: lazy
provider: chain_provider
guard:
authenticators:
- AppSecurityBasicAuthenticator
logout:
path: app_logout
Комментарии:
1. Пожалуйста, поделитесь более подробной информацией. Вы также очистили кэш приложения, чтобы снова прочитать конфигурацию?
2. скорее всего, вам потребуется удалить файлы в var/кэше, а затем воссоздать кэш. Также может быть файл разрешений, но удаление кэша, а затем его повторное создание, скорее всего, исправит это.
3. Я попробовал ваши предложения, но безуспешно… странно, что простое переключение с разработки на ТЕСТИРОВАНИЕ или PROD блокирует вход одного типа пользователей в систему. Это проверено на двух разных установках, поэтому я понимаю, что это не локальная вещь…
4. Я выяснил эту проблему. По какой-то причине переход с DEV на TEST или PROD выдал исключение безопасности на странице входа в систему, перенаправив (302) снова на страницу входа в систему?!?! Внимательно изучив сетевой поток, я увидел перенаправление 302 на ту же страницу входа в систему. Добавление — { путь: ^/логин, роли: PUBLIC_ACCESS } в системе безопасности. yaml решил эту проблему.