有一个常规身份验证器form_login和一个自定义身份验证器,用于通过标头中的密钥进行授权。通过第二个身份验证器进行授权时,会创建一个会话,并且每次请求都会发生这种情况。如果在 security.yaml 中设置stateless: true,那么它不会让用户通过form_login身份验证器。如何确保只有在通过 API 密钥授权时才保存会话?
安全.yaml:
security:
enable_authenticator_manager: true
encoders:
App\Entity\User:
algorithm: auto
providers:
app_user_provider:
entity:
class: App\Entity\User
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
lazy: true
provider: app_user_provider
form_login:
login_path: app_login
check_path: app_login
default_target_path: /
custom_authenticators:
- App\Security\TokenAuthenticator
entry_point: form_login
logout:
path: app_logout
为 保存form_login和删除会话很重要TokenAuthenticator,因为 可以以不同的方式访问端点。验证器是根据这篇文章制作的。
目前,我不得不放弃 Symfony 生成的标准会话。相反,在这两种情况下,我都使用令牌,但在一种情况下,我将其写入 cookie,在另一种情况下,我在标题中使用它。令牌在控制器中生成。