从多个地方验证用户身份的正确位置在哪里?
Where is correct place to authenticate users from multiple places?
在我的第一个 Symfony 4.4 项目中,我需要从数据库验证用户。不幸的是,在用户登录之前,我需要检查远程 API 服务中的用户状态。如果用户在此服务中处于活动状态并且凭据与我的数据库中的凭据相同,我可以在我的应用程序中对用户进行身份验证。
在我的应用程序中进行身份验证之前检查用户是否处于活动状态的最佳位置在哪里?我需要创建自定义守卫?自定义用户提供商?
我用的是Lexik JWT认证,有我的/config/packages/security.yaml
security:
providers:
app_user_provider:
entity:
class: App\Entity\User
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
authorization:
pattern: ^/api/v1/auth/
stateless: true
anonymous: true
json_login:
check_path: /api/v1/auth/sign-in/
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
username_path: email
api:
pattern: ^/api/v1/(user|req)/
stateless: true
anonymous: false
provider: app_user_provider
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
我在 4.1 之后就没有使用过 Symfony,所以最近情况可能发生了变化。你只需要检查一下。
Where is best place to check that user is active before authentication in my app? I need to create custom guard? Custom user provider?
User Provider 就是答案。如果您查看 UserProviderInterface,它会显示 "Internally, a user provider can load users from any source (databases, configuration, web service)."
... before user sign-in I need to check user status in remote API service. If user is active in this service and credentials are same as in my database, I can authenticate user in my app.
所以你能做的就是满足你的要求:
- 在您的 serurity.yaml 中实施
firewall
并使其使用 simple_preauth
.
- 实施与
simple_preauth. authenticator
配套的身份验证器 class。就身份验证而言,这会将所有内容连接起来。
- 实现你的用户提供者调用你的远程API首先检查用户是否活跃然后再检查你的本地数据库等等。
资源:
在我的第一个 Symfony 4.4 项目中,我需要从数据库验证用户。不幸的是,在用户登录之前,我需要检查远程 API 服务中的用户状态。如果用户在此服务中处于活动状态并且凭据与我的数据库中的凭据相同,我可以在我的应用程序中对用户进行身份验证。
在我的应用程序中进行身份验证之前检查用户是否处于活动状态的最佳位置在哪里?我需要创建自定义守卫?自定义用户提供商?
我用的是Lexik JWT认证,有我的/config/packages/security.yaml
security:
providers:
app_user_provider:
entity:
class: App\Entity\User
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
authorization:
pattern: ^/api/v1/auth/
stateless: true
anonymous: true
json_login:
check_path: /api/v1/auth/sign-in/
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
username_path: email
api:
pattern: ^/api/v1/(user|req)/
stateless: true
anonymous: false
provider: app_user_provider
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
我在 4.1 之后就没有使用过 Symfony,所以最近情况可能发生了变化。你只需要检查一下。
Where is best place to check that user is active before authentication in my app? I need to create custom guard? Custom user provider?
User Provider 就是答案。如果您查看 UserProviderInterface,它会显示 "Internally, a user provider can load users from any source (databases, configuration, web service)."
... before user sign-in I need to check user status in remote API service. If user is active in this service and credentials are same as in my database, I can authenticate user in my app.
所以你能做的就是满足你的要求:
- 在您的 serurity.yaml 中实施
firewall
并使其使用simple_preauth
. - 实施与
simple_preauth. authenticator
配套的身份验证器 class。就身份验证而言,这会将所有内容连接起来。 - 实现你的用户提供者调用你的远程API首先检查用户是否活跃然后再检查你的本地数据库等等。
资源: