Сбой входа в систему Symfony в тестовых и производственных средах

#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 решил эту проблему.