我有一个用 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-providers
providers:
users_in_memory:
memory:
users:
userOne:
password: userOne
roles: ROLE_USER
userTwo:
password: userTwo
roles: ROLE_USER
adminOne:
password: admin
roles: ROLE_ADMIN
firewalls:
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: php74
env_variables:
APP_ENV: prod
APP_SECRET: ###
DATABASE_URL: ###
慕田峪9158850