Symfony安全:访问控制规则在Symfony 6.1更新后中断



我最近将Symfony 5.4项目升级到6.1。升级后,我再也无法打开起始页了。/login页面和用户登录仍然有效。

任何其他页面上显示的错误都非常神秘:

ErrorException:警告:preg_match((:编译失败:不匹配偏移量2处的右括号

位于vendor/symfony/http-foundation/RequestMatcher.php:165

位于Symfony\Component\HttpFoundation\RequestMatcher->匹配项(对象(请求(((供应商/symfony/security http://AccessMap.php:42(

如果我注释掉security.yaml中的所有access_control,我可以再次在页面上导航,所以我认为错误在这些规则中。我看过https://symfony.com/doc/current/security/access_control.html但无法弄清楚为什么我的配置被破坏了。这是错误消息的来源吗?

这是我的security.yaml:

security:
enable_authenticator_manager: true
password_hashers:
AppEntityUser:
algorithm: auto
providers:
app_user_provider:
entity:
class: AppEntityUser
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
lazy: true
provider: app_user_provider
custom_authenticator: AppSecurityLoginFormAuthenticator
logout:
path: security_logout
target: security_login
form_login:
check_path: security_login
login_path: security_login
enable_csrf: true
default_target_path: default_index
entry_point: form_login
access_control:
- { path: ^/login$, roles: PUBLIC_ACCESS }
- { path: ^/registration, roles: PUBLIC_ACCESS }
- { path: ^/resetting, roles: PUBLIC_ACCESS }
- { path: ^/locale, roles: PUBLIC_ACCESS }
- { path: ^/_error, roles: PUBLIC_ACCESS }
- { path: ^/), roles: ROLE_USER }

错误消息基本上告诉您出了什么问题。

您的上一个access_control规则使用了一个右括号"(&";。在Regex中,这是一个保留字符。如果这不是一个错误,并且你实际上有一个以右括号开头的路由,那么你必须像这样转义字符:

- { path: ^/), roles: ROLE_USER }

最新更新