Symfony4.4 security.yaml多角色多登录路径配置报错如何解决
Symfony4.4多用户角色多登录页配置问题解决方案
报错的直接原因是你在配置里用|拼接多个路由名的写法不被Symfony支持,系统会把security_login |security_login_recruteur整体当成一个路由名去匹配,自然找不到对应路由。除此之外你的用户provider、防火墙配置逻辑也不符合多用户实体的使用规范,按以下步骤修改即可:
1. 修正用户提供者配置
Symfony的单个entity provider不能同时绑定两个用户实体,需要拆分为两个独立的provider:
providers: users_in_memory: { memory: null } app_user_provider: entity: class: App\Entity\User property: email app_recruteur_provider: entity: class: App\Entity\Recruteur property: email
2. 拆分防火墙实现多登录页隔离
防火墙是按定义顺序匹配的,优先给招聘者模块定义独立防火墙,单独绑定对应的登录、登出路由:
firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false # 招聘者专属防火墙 recruteur: pattern: ^/recruteur anonymous: lazy provider: app_recruteur_provider form_login: login_path: security_login_recruteur check_path: security_login_recruteur # 可自定义登录成功后的跳转路径 default_target_path: recruteur_index logout: path: security_logout_recruteur target: home # 普通用户主防火墙 main: anonymous: lazy provider: app_user_provider form_login: login_path: security_login check_path: security_login default_target_path: user_index logout: path: security_logout target: home
3. 修正访问控制规则
要提前放开登录页的匿名访问权限,否则未登录用户无法进入登录页:
access_control: # 招聘者登录页允许匿名访问 - {path: ^/recruteur/connexion, roles: IS_AUTHENTICATED_ANONYMOUSLY } - {path: ^/recruteur, roles: ROLE_RECRUTEUR } # 普通用户登录页允许匿名访问 - {path: ^/user/connexion, roles: IS_AUTHENTICATED_ANONYMOUSLY } #- { path: ^/admin, roles: ROLE_ADMIN }
额外注意事项
- 确保路由配置中
security_login_recruteur、security_login、两个登出路由的名称和配置中完全一致 - Recruteur实体的getRoles方法需要默认返回
ROLE_RECRUTEUR,才能匹配^/recruteur路径的权限要求 - 如果后续需要对接管理员角色,可以单独新增管理员防火墙,也可以给User实体增加ROLE_ADMIN角色后在主防火墙的access_control中新增规则即可
内容的提问来源于stack exchange,提问作者Hello_world
相关产品推荐
相关产品推荐

