Как настроить многопользовательский объект с токеном JWT? - PullRequest
1 голос
/ 08 апреля 2020

У меня есть несколько пользовательских сущностей (несколько таблиц):

  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

1 Ответ

1 голос
/ 08 апреля 2020

JWT ничего не указывает c для нескольких провайдеров пользователей.

Если пользователям обоих типов необходимо войти в систему на одном и том же брандмауэре (например, один и тот же шаблон 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

У вас также должны быть отдельные пути входа для каждого типа пользователей, каждый со своим собственным указанным c провайдером пользователя:

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

Теперь ваши «дилеры» получают свой токен по адресу /auth/login/dealer, и ваши «клиенты» получают свой токен по номеру /auth/login/customer.

Поскольку провайдеры как у дилера, так и у клиента будут последовательно проверяться, если у вас есть пользователи в обеих таблицах с одним и тем же именем пользователя, это может быть проблематично c (поскольку второй провайдер будет проверен только в том случае, если пользователь не найден в первом), поэтому вам следует планировать соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...