如何使用 JWT 令牌配置多个用户实体?

How to configured multiple user entity with JWT token?

我有多个用户实体(多个表):

  1. App\Entity\Customer

  2. App\Entity\Dealer

如何使用 JWT 令牌配置多个用户实体?

encoders:
    App\Entity\Dealer:
        algorithm: bcrypt

    App\Entity\Customer:
        algorithm: bcrypt

providers:
    dealer:
        entity:
          class: App\Entity\Dealer
          property: username

    customer:
        entity:
            class: App\Entity\Customer
            property: username

对于拥有多个用户提供商,JWT 没有什么特别的。

如果两种类型的用户都需要登录到同一个防火墙(例如相同的 URL 模式),您需要做的是创建一个链用户提供程序,以便系统尝试从中获取用户每个用户提供商:

providers:
    ## ... your other providers up here.
    all_users:
          chain:
            providers: ['customer', 'dealer']

您需要在要保护的防火墙中使用此提供程序:

firewall:
    ## ... other firewall entries ...
    api:
      pattern:   ^/api
      stateless: true
      anonymous: true
      provider: all_users
      guard:
        authenticators:
          - lexik_jwt_authentication.jwt_token_authenticator

您还应该为每种类型的用户设置单独的登录路径,每个路径都有自己特定的用户提供商:

firewall:
###
    customer_login:
      pattern:  ^/auth/login/customer
      stateless: true
      anonymous: true
      provider: customer
      json_login:
        check_path: /auth/login/customer
        success_handler: lexik_jwt_authentication.handler.authentication_success
        failure_handler: lexik_jwt_authentication.handler.authentication_failure

    dealer_login:
      pattern: ^/auth/login/dealer
      stateless: true
      anonymous: true
      provider: dealer
      json_login:
        check_path: /auth/login/dealer
        success_handler: lexik_jwt_authentication.handler.authentication_success
        failure_handler: lexik_jwt_authentication.handler.authentication_failure

现在您的 "dealers" 在 /auth/login/dealer 获得令牌,您的 "customers" 在 /auth/login/customer 获得令牌。

由于将按顺序检查经销商和客户的供应商,如果您在两个表中都有用户使用相同的用户名,则可能会出现问题(因为只有在找不到用户时才会检查第二个供应商在第一个),所以你应该相应地计划。