You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony 5.4链用户提供者配置登录链接报错求助

解决Symfony 5.4中Login Link功能提示“旧认证系统不支持”的问题

问题场景

我正在为Symfony 5.4项目创建无密码(PasswordLess)API,配置登录链接功能时,启用login_link配置后出现错误:

The old authentication system is not supported with login_link.

项目防火墙配置如下:

firewalls:
    dev:
        pattern:                        ^/(_(profiler|wdt)|css|images|js)/
        security:                       false

    install:
        pattern:                        ^/installer
        security:                       false
        anonymous:                      true

    login:
        pattern:                        ^/user/(login|reset-request|send-email|check-email|auto-login)$
        provider:                       chain_provider
        anonymous:                      true
        #login_link:                    # ERROR HERE
        #    check_route: login_check
        #    signature_properties: ['id']

    main:
        pattern:                        ^/
        provider:                       chain_provider
        form_login:
            csrf_token_generator:       security.csrf.token_manager
            check_path:                 main_security_check
            login_path:                 main_security_login
            use_forward:                true
        logout:
            path:                       main_security_logout
        remember_me:
            secret:                     "%env(APP_SECRET)%"
            name:                       BAPRM
            lifetime:                   1209600   # stay logged for two weeks
            samesite:                   'lax'
        anonymous:                      false

问题原因

Symfony的Login Link功能仅支持新的认证系统(基于Authenticator),当前项目仍在使用旧版认证系统配置,导致冲突报错。

解决步骤

1. 启用新认证管理器

在security.yaml的根级别添加配置,强制启用新的authenticator系统:

security:
    enable_authenticator_manager: true
    # ... 其他原有配置

2. 完善Login Link配置

取消login防火墙中login_link的注释,确保配置正确:

login:
    pattern:                        ^/user/(login|reset-request|send-email|check-email|auto-login)$
    provider:                       chain_provider
    anonymous:                      true
    login_link:
        check_route: login_check
        signature_properties: ['id']

注意:check_route必须是你已定义的路由,用于处理登录链接的验证请求。

3. 确保用户实体符合要求

你的用户实体需满足:

  • 实现Symfony\Component\Security\Core\User\UserInterface
  • 拥有getId()方法(对应配置中的signature_properties: ['id']),返回用户的唯一标识

4. 迁移主防火墙到新认证系统(可选但推荐)

若main防火墙仍使用旧版form_login,建议迁移到自定义Authenticator以避免系统冲突:

  1. 通过Symfony命令生成表单登录Authenticator:
    php bin/console make:auth
    
  2. 更新main防火墙配置,替换form_login为custom_authenticator:
    main:
        pattern:                        ^/
        provider:                       chain_provider
        custom_authenticator: App\Security\LoginFormAuthenticator
        logout:
            path:                       main_security_logout
        remember_me:
            secret:                     "%env(APP_SECRET)%"
            name:                       BAPRM
            lifetime:                   1209600   # stay logged for two weeks
            samesite:                   'lax'
        anonymous:                      false
    

验证修改

完成配置后清除缓存:

php bin/console cache:clear

重新测试登录链接功能,报错即可解决。


内容的提问来源于stack exchange,提问作者talhaamir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:11:17