我有一个用 php7.4 编写的应用程序,使用框架 symfony 5,我正在尝试将其部署在标准环境 Google App Engine 上。身份验证由 login_form 处理,而 user_provider(目前)是 in_memory_user 提供程序。(这不是最终版本,身份验证稍后会更改,但现在我应该能够在 GAE 上部署具有此类配置的应用程序。)security.yaml 文件:security:# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providersproviders: users_in_memory: memory: users: userOne: password: userOne roles: ROLE_USER userTwo: password: userTwo roles: ROLE_USER adminOne: password: admin roles: ROLE_ADMINfirewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: anonymous: ~ provider: users_in_memory form_login: login_path: login check_path: login default_target_path: accueil logout: path: logout target: login access_control: - { path: ^/admin, roles: [ROLE_ADMIN, ROLE_USER] } - { path: ^/logout, roles: [ROLE_ADMIN, ROLE_USER] } - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }encoders: Symfony\Component\Security\Core\User\User: plaintext在本地运行应用程序,一切都按预期进行。一旦我在登录表单中提交用户名和密码,他就会设置“app.user”。当重定向到“ accueil ”页面(即基本 URL gae-domain/admin)时,它会识别出有用户登录,并且该用户被授予访问该页面的权限。在 App Engine 上这不起作用。它确实可以识别您是否输入了正确或错误的密码,因此它确实可以识别 users_in_memory 提供程序,并且如果用户名 + 密码正确,它会立即调用“/ admin ”页面,但他会立即重定向到登录页面,因为他无法识别登录用户,因此您无权访问“/admin”页面。为了测试,我删除了 access_control,现在用户再次可以访问“ /admin ”页面,但在该页面内,没有任何内容针对他的角色进行个性化,因此,他再次无法在“/admin”页面中找到用户应用程序用户'。我的 app.yaml 看起来像这样(### 在部署时被替换为正确的信息)runtime: php74env_variables: APP_ENV: prod APP_SECRET: ### DATABASE_URL: ###
1 回答
慕田峪9158850
TA贡献1794条经验 获得超7个赞
如果您的 App Engine 服务扩展,App Engine 标准环境不支持会话关联,您的内存用户将不会在实例之间共享。尝试将您的缩放策略 移至手动缩放并设置1 instance
要使会话在多个 App Engine 实例中持续存在,您需要使用数据库。Symfony 提供了一种使用 PDO 会话存储来处理此问题的方法。
- 1 回答
- 0 关注
- 108 浏览
添加回答
举报
0/150
提交
取消