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 (поскольку второй провайдер будет проверен только в том случае, если пользователь не найден в первом), поэтому вам следует планировать соответственно.