php - 没有为“x”防火墙上的“守卫”侦听器明确配置提供者是不明确的,因为有多个注册提供者
问题描述
当我尝试执行两个不同的用户登录路径时,我需要帮助来解决错误。我想知道如何使用两个提供商来验证两种类型的用户(管理员/商品)。
当我在 security.yaml 中使用两个提供程序时,我的错误在 Symfony 中看起来像这样:
没有为“api”防火墙上的“guard”监听器显式配置提供程序是不明确的,因为有多个注册提供程序。
注意:我使用的是 JWT 身份验证。
我的文件security.yaml:
security:
encoders:
App\Entity\User:
algorithm: argon2i
App\Entity\Merch:
algorithm: argon2i
providers:
users_provider:
name: users_provider
entity:
class: App\Entity\User
property: username
merchs_provider:
name: merchs_provider
entity:
class: App\Entity\Merch
property: codeMerch
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login_users:
pattern: ^/api/user/login
stateless: true
anonymous: true
provider: users_provider
context: my_context
json_login:
check_path: /api/user/login_check_user
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
login_merch:
pattern: ^/api/merch/login
stateless: true
anonymous: true
provider: merchs_provider
context: my_context
json_login:
check_path: /api/merch/login_check_merch
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
refresh:
pattern: ^/api/token/refresh
stateless: true
anonymous: true
api:
pattern: ^/api
stateless: true
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
main:
anonymous: true
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/validator, roles: ROLE_VALIDATOR }
- { path: ^/api/user/login, roles: ROLE_ADMIN }
- { path: ^/api/merch/login, roles: ROLE_MERCH }
- { path: ^/api/token/refresh, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
解决方案
您有 2 个用户提供者:
users_provider
merchs_provider
您的防火墙配置api
缺少您要用于此防火墙的配置。
您需要为api
防火墙显式配置提供程序以消除警告:
firewalls:
# [..]
api:
pattern: '^/api'
stateless: true
provider: 'users_provider'
guard:
authenticators:
- 'lexik_jwt_authentication.jwt_token_authenticator'
使用链提供商允许用户和商家对 API 进行组合访问。
providers:
# [..]
chain_provider:
chain:
providers: ['users_provider', 'merchs_provider']
推荐阅读
- laravel - SQL查询类似集合的概念(补或除外)
- javascript - javascript:apex.navigation.redirect 在 chrome 上不起作用
- firebase - 如何在 Flutter 中跟踪屏幕视图并将其显示在应用程序中
- python - Asyncio.create_subprocess_exec NotImplementedError - Fastapi 后台任务
- math - 提取旋转值并将其添加到 Maya 矩阵
- android - 当我从最后一个片段返回时如何避免活动的空白屏幕
- javascript - 如何在单词数组中找到一个句子并将这些单词连接起来
- python - python请求分块编码文件和元数据
- uwp-xaml - SelectedItem 的 C++ WinRT UWP XAML 数据绑定到 String / hstring 类型的属性无法编译
- css - 如何通过flex解决以下查询?