为了账号安全,请及时绑定邮箱和手机立即绑定

在 Google App Engine (GAE) 上部署时无法识别 app.user

在 Google App Engine (GAE) 上部署时无法识别 app.user

PHP
守着星空守着你 2023-09-08 18:25:27
我有一个用 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 会话存储来处理此问题的方法。


查看完整回答
反对 回复 2023-09-08
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信