#phpunit #authorization #access-control #symfony5
Вопрос:
Я использую новую систему авторизации Symfony.
В файле security.yaml я установил следующие ограничения доступа.
security:
enable_authenticator_manager: true
//....
role_hierarchy:
ROLE_ADMIN: [ROLE_USER]
access_control:
- { path: ^/login, roles: PUBLIC_ACCESS }
- { path: ^/signup, roles: PUBLIC_ACCESS }
- { path: ^/reset, roles: PUBLIC_ACCESS }
- { path: ^/, roles: ROLE_USER }
В моем тесте я пытаюсь поймать перенаправление 302.
$client = static::createClient();
$client->request('GET', '/');
$this->assertSame(302, $client->getResponse()->getStatusCode());
Но я получаю следующее сообщение об ошибке.
Не удалось подтвердить, что 500 идентичен 302.
Пожалуйста, обратите внимание, что я получаю ошибку 500 вместо кода перенаправления 403.
Затем я пытаюсь отследить запрос с помощью.
$client->catchExceptions(false);
И я вижу следующий стек запросов.
Произошла 1 ошибка:
- ПриложениеТестыФункционалДомашний сайт::testGuest SymfonyКомпонентБезопасностьЯдроИсключениеИсключение доступа: Доступ запрещен.
C:Userswebgrprojectsproject-managermanagervendorsymfonysecurity-httpFirewallAccessListener.php:112 C:Userswebgrprojectsproject-managermanagervendorsymfonysecurity-httpFirewallAccessListener.php:106 C:Userswebgrprojectsproject-managermanagervendorsymfonysecurity-bundleDebugWrappedLazyListener.php:49 C:Userswebgrprojectsproject-managermanagervendorsymfonysecurity-bundleSecurityLazyFirewallContext.php:60 C:Userswebgrprojectsproject-managermanagervendorsymfonysecurity-bundleDebugTraceableFirewallListener.php:59 C:Userswebgrprojectsproject-managermanagervendorsymfonysecurity-httpFirewall.php:86 C:Userswebgrprojectsproject-managermanagervendorsymfonyevent-dispatcherDebugWrappedListener.php:117 C:Userswebgrprojectsproject-managermanagervendorsymfonyevent-dispatcherEventDispatcher.php:230 C:Userswebgrprojectsproject-managermanagervendorsymfonyevent-dispatcherEventDispatcher.php:59 C:Userswebgrprojectsproject-managermanagervendorsymfonyevent-dispatcherDebugTraceableEventDispatcher.php:151 C:Userswebgrprojectsproject-managermanagervendorsymfonyhttp-kernelHttpKernel.php:132 C:Userswebgrprojectsproject-managermanagervendorsymfonyhttp-kernelHttpKernel.php:78 C:Userswebgrprojectsproject-managermanagervendorsymfonyhttp-kernelKernel.php:199 C:Userswebgrprojectsproject-managermanagervendorsymfonyhttp-kernelHttpKernelBrowser.php:65 C:Userswebgrprojectsproject-managermanagervendorsymfonyframework-bundleKernelBrowser.php:169 C:Userswebgrprojectsproject-managermanagervendorsymfonybrowser-kitAbstractBrowser.php:402 C:Userswebgrprojectsproject-managermanagertestsFunctionalHomeTest.php:15
Почему я не могу выполнить тест «контроль доступа»?
Почему во время тестирования я получаю ошибку сервера 500 вместо простого перенаправления 302?
Я был бы рад любому предложению.
Заранее спасибо.
Вот еще что я хотел бы добавить, вполне возможно, что эта информация может оказаться решающей. Мой сайт работает по протоколу https.
Ответ №1:
Наконец, я понял, в чем проблема, и добавил в фреймворк следующие строки.ямл и все остальное работало.
when@test:
framework:
test: true
session:
storage_factory_id: session.storage.factory.mock_file