我正在嘗試使用多個身份驗證器(針對每個用戶角色)。他們在最后一個之前工作正常,它將未經身份驗證的用戶重定向到 URL/dashboard/以登錄,但請求被/dashboard拋出AccessDeniedHttpException:這是我的security.yaml文件,其中包含所有防火墻:security: encoders: App\Entity\User: algorithm: sha512 providers: app_user_provider: entity: class: App\Entity\User property: email firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: pattern: ^/admin/ anonymous: lazy provider: app_user_provider guard: authenticators: - App\Security\AdminAuthenticator logout: path: admin_logout expert: pattern: ^/dashboard/ anonymous: lazy provider: app_user_provider guard: authenticators: - App\Security\ExpertAuthenticator logout: path: expert_logout user: anonymous: lazy provider: app_user_provider guard: authenticators: - App\Security\UserAuthenticator logout: path: user_logout access_control: - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin, roles: ROLE_ADMIN } - { path: ^/ask, roles: ROLE_USER } - { path: ^/dashboard/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/dashboard, roles: ROLE_EXPERT }我認為沒有必要在此處粘貼驗證器,因為它是 Symfony 5 make:authmaker 命令默認值,我為所有三個驗證器復制并粘貼了它,同時僅更改了public const LOGIN_ROUTE = 'user_login';函數onAuthenticationSuccess()的重定向響應路徑。每當我訪問/admin,/admin/whatever或 時/ask,/ask/whatever我都會被重定向到其各自的登錄表單 (/admin/login和/ask/dashboard)。/dashboard/login如果我不是從另一個身份驗證器登錄的,或者我是使用登錄的,我可以直接訪問ROLE_EXPERT。如果沒有,我將得到上述異常。那么,你知道發(fā)生了什么事嗎?
1 回答

慕田峪4524236
TA貢獻1875條經驗 獲得超5個贊
- { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
您應該作為最后一個條目移動access_control
。
那是因為 Symfony 在您編寫它時對其進行解析(將其視為 FIFO 隊列),并且可以/
以匿名方式訪問,關聯的令牌將是匿名的(它不會嘗試從會話或其他任何內容中讀?。?。
- 1 回答
- 0 關注
- 114 瀏覽
添加回答
舉報
0/150
提交
取消