问题描述
我现在有点迷茫,可以朝正确的方向推动。
简而言之
- PHP Symfony 4 项目(主要是默认配置),托管在 Google Cloud App Engine 上
- REST API,通过 LexikJWTAuthenticationBundle 进行身份验证
- 请求需要在每个请求上传递身份验证令牌(Symfony 防火墙是
stateless: true
) - 作为 API 使用者的单页应用程序(React 前端)
在我的用例中,一个经过身份验证的用户打开页面 X
。在这个页面上,有三个不同的数据部分,需要从后端加载。因此,我需要获取三个 API 端点。
打开页面时,这三个请求不是同时执行的,它们相互等待。在 this SO question 中已经提到,Symfony 不支持一个用户会话的并发请求,或者可以手动关闭一个打开的会话。 因为我根本不使用会话,所以我不想搞乱关闭随机的东西。
但我的问题是: 我相信有一个无状态的 API,用户不存储在服务器会话中。我必须在每个请求中传递 JWT 令牌。
-> 是否有可能让三个经过身份验证的请求与无状态 REST API 并行提供服务 - 或者一旦“涉及用户”就不可能实现?
仅供参考:尝试针对未经身份验证的端点的三个请求显示了并行请求。
代码片段
security.yaml
firewalls:
login:
pattern: ^/api/v1/login
stateless: true
anonymous: true
json_login:
check_path: /api/v1/login_check
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
api:
pattern: ^/api/v1
stateless: true
access_denied_handler: App\Security\AccessDeniedHandler
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
access_control:
- { path: ^/api/v1/,role: IS_AUTHENTICATED_FULLY }
解决方法
好吧,没关系,这是我的 Staging 环境的配置问题。 对于我测试的 API 端点,创建了一个会话。