Saya cuba mengasingkan pengesahan pengguna daripada pengesahan pentadbir.
Jadi saya mencipta 2 tembok api dan 2 kawalan akses berbeza.
Fail security.yaml saya adalah seperti berikut:
enable_authenticator_manager: true password_hashers: SymfonyComponentSecurityCoreUserPasswordAuthenticatedUserInterface: 'auto' pembekal: owner_authentication: entiti: kelas: AppEntityMerchantOwner harta: emailAddress pengesahan_pengguna: entiti: kelas:AppEntityUserUser harta: emailAddress tembok api: dev: corak: ^/(_(profiler|wdt)|css|imej|js)/ keselamatan: palsu pengguna: malas: betul corak: ^/admin/login/ pembekal: pengesahan_pengguna user_checker: AppSecurityAuthentificableModelChecker borang_log masuk: pembekal: pengesahan_pengguna default_target_path: app.dashboard.index use_referer: benar use_forward: palsu laluan_log masuk: app.authorization.admin_login check_path: app.authorization.admin_login nama pengguna_parameter: log masuk[emailAddress] kata laluan_parameter: log masuk[kata laluan] log keluar: laluan: app.authorization.logout sasaran: app.authorization.admin_login utama: malas: betul corak: ^/ pembekal: owner_authentication user_checker: AppSecurityAuthentificableModelChecker borang_log masuk: pembekal: owner_authentication default_target_path: app.dashboard.index use_referer: benar use_forward: palsu login_path: app.authorization.login check_path: app.authorization.login nama pengguna_parameter: log masuk[emailAddress] kata laluan_parameter: log masuk[kata laluan] log keluar: laluan: app.authorization.logout sasaran: app.authorization.login access_control: - { laluan: ^/admin/log masuk, peranan: PUBLIC_ACCESS} - { laluan: ^/log masuk, peranan: PUBLIC_ACCESS } - { laluan: ^/, peranan: ROLE_USER }
Semuanya berfungsi dengan baik pada tembok api utama, tetapi apabila saya menggunakan butang hantar tembok api pengguna (pentadbir), halaman log masuk menyegarkan dirinya sendiri dan kemudian tiada apa yang berlaku. Saya tidak mendapat sebarang kesilapan.
** Jika saya menambah log masuk pengguna (admin) pada tembok api utama, maka /admin/login berfungsi dengan baik dan yang satu lagi tidak lagi berfungsi.
Apabila saya memanggil $authenticationUtils->getLastAuthenticationError()
, saya tidak mendapat sebarang ralat. Tetapi pengesahan juga tidak berfungsi.
Beginilah rupa pengawal saya:
public function adminLogin(AuthenticationUtils $authenticationUtils): Respons { if ($this->getUser()) { kembalikan $this->redirectToRoute('app.dashboard.index'); } $loginForm = $this->createForm(LoginType::class, ['emailAddress' => $authenticationUtils->getLastUsername()]); kembalikan $this->renderForm('app/pages/authorization/admin_login.html.twig', [ 'title' => 'Log masuk', 'login_form' => 'error' => $authenticationUtils->getLastAuthenticationError()?->getMessageKey(), ]); }
Ini adalah masalah yang sama yang dialami seseorang: https://grafikart.fr/forum/35234, tetapi saya tidak menemui sebarang penyelesaian.
Akhirnya, saya menemui jawapannya dan saya akan menyiarkannya di sini:https://stackoverflow.com/a/42352112/8003007Apa yang perlu saya lakukan ialah menambah satu
context: my_context
pada kedua-dua tembok api.Ini adalah pilihan yang sukar dikenal pasti kerana ia tidak muncul dalam dokumentasi Symfony rasmi dan semasa, hanya dalam versi terdahulu, seperti Symfony 3.4.