没有为“x”防火墙上的“guard”监听器明确配置提供者是不明确的,因为注册的提供者不止一个

you*_*izi 9 php symfony

当我尝试执行两个不同的用户登录路径时,我需要帮助来解决错误。我想知道如何使用两个提供程序来验证两种类型的用户(管理员/商品)。

当我在 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 }
Run Code Online (Sandbox Code Playgroud)

Nic*_*ich 11

您有 2 个用户提供程序:

  • users_provider
  • merchs_provider

您的防火墙配置api防火墙没有配置哪一个要使用这个防火墙。

您需要为api防火墙显式配置提供程序以消除警告:

firewalls:
  # [..]
  api:
    pattern:   '^/api'
    stateless: true
    provider: 'users_provider'
    guard:
      authenticators:
        - 'lexik_jwt_authentication.jwt_token_authenticator'
Run Code Online (Sandbox Code Playgroud)

使用链提供商允许用户和商家对 API 的组合访问。

providers:
  # [..]
  chain_provider:
    chain:
      providers: ['users_provider', 'merchs_provider']
Run Code Online (Sandbox Code Playgroud)