如何使用 JWT 令牌配置多个用户实体?
How to configured multiple user entity with JWT token?
我有多个用户实体(多个表):
App\Entity\Customer
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
获得令牌。
由于将按顺序检查经销商和客户的供应商,如果您在两个表中都有用户使用相同的用户名,则可能会出现问题(因为只有在找不到用户时才会检查第二个供应商在第一个),所以你应该相应地计划。
我有多个用户实体(多个表):
App\Entity\Customer
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
获得令牌。
由于将按顺序检查经销商和客户的供应商,如果您在两个表中都有用户使用相同的用户名,则可能会出现问题(因为只有在找不到用户时才会检查第二个供应商在第一个),所以你应该相应地计划。