symfony - Symfony 4:如何在防火墙中为用户/管理员提供多个提供者?
问题描述
我不能使用两种不同的形式为用户和管理员提供两个不同的提供程序
我想要两个防火墙,用于用户和管理员。我创建了两个不同的提供者链接两个不同的实体。我可以以用户身份登录,但不能以管理员身份登录。我不明白我需要添加更多内容。
另一件事,我知道有app.user。但是还有 app.admin 吗?为了在两个不同的防火墙上拥有两个完全独立的帐户?
security:
providers:
user_provider:
entity:
class: App\Entity\User
property: username
admin_provider:
entity:
class: App\Entity\Admin
property: username
chain_provider:
chain:
providers: [user_provider, admin_provider]
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
provider: user_provider
anonymous: true
logout:
path: /logout
target: /login
remember_me:
secret: '%kernel.secret%'
lifetime: 604800 # 1 week in seconds
path: /
form_login:
login_path: /login
check_path: /login
backoffice:
pattern: ^/backoffice
provider: admin_provider
logout:
path: /backoffice/logout
target: /backoffice/login
form_login:
login_path: /backoffice/login
check_path: /backoffice/login
access_control:
- { path: ^/backoffice/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/backoffice, roles: ROLE_ADMIN }
- { path: ^/mon-compte, roles: ROLE_USER }
encoders:
App\Entity\User:
algorithm: bcrypt
cost: 12
App\Entity\Admin:
algorithm: bcrypt
cost: 12
我null
打电话时出错$authenticationUtils->getLastAuthenticationError()
解决方案
切换防火墙顺序,所以main
防火墙是最后一个。
Symfony 每个请求只使用一个防火墙,它是第一个与pattern
. 因此,在您的情况下,它也main
对 url 使用防火墙,^/backoffice
因为/backoffice
匹配^/
模式。
我不确定它是否会在这里解决您的所有问题,但是您需要这样做才能真正使用backoffice
防火墙。
关于app.user
and app.admin
- 不,没有app.admin
. 管理员也是一个用户,所以当你以管理员身份登录时,你会得到它的实体app.user
推荐阅读
- amazon-web-services - 是否有用于在 AWS 中设置自动创建的 LB 名称的 k8s 注释
- react-native - 本地博览会通知每天触发(SDK 39.0.0)
- sql-server - 加入多个表并应用聚合给出错误的结果
- css - 角度渲染器 setStyle 不会应用线性渐变
- r - 如何在 R 中制作羽毛图?
- git - 克隆后PhpStorm文件全部被修改 - 行分隔符
- docker - WebdriverIO 应用程序错误未通过 docker-compose 连接到standalone-chrome
- matlab - 使用 Matlab 进行声源定位
- reactjs - 用两个字段更新一个状态?
- r - 是否有 R 函数来计算累积分布函数?