TYPO3 7升10时Felogin登录未自动转换密码为argon2i问题咨询
新用户可正常用argon2i存储、登录,说明新密码哈希机制本身运行正常,存量用户无法触发自动转换不需要额外安装扩展,核心是漏配了旧哈希的兼容验证规则,按以下步骤检查配置即可:
开启遗留密码哈希的验证权限
自动转换的前置逻辑是:系统先识别数据库中存储的旧哈希值,调用对应算法完成密码校验,校验通过后才会用argon2i重新计算哈希覆盖旧值。如果升级后仅保留argon2i作为唯一允许的密码算法,系统无法识别旧哈希格式,会直接判定密码错误,自然走不到转换流程。
进入后台安装工具 > 配置预设 > 密码哈希设置,勾选你站点在TYPO3 7时期使用的加盐算法作为可识别的遗留算法(7版本常用的是bcrypt、phpass,部分老站点用md5加盐),不要仅保留argon2i选项。确认前端登录场景的独立哈希配置
TYPO3 10对前端(FE)、后端(BE)登录的密码哈希配置做了隔离,很多人升级时仅配置了后端的哈希规则,漏了前端felogin对应的配置项。在站点的AdditionalConfiguration.php中确认前端密码哈希配置如下:$GLOBALS['TYPO3_CONF_VARS']['FE']['passwordHashing'] = [ 'className' => \TYPO3\CMS\Core\Crypto\PasswordHashing\Argon2iPasswordHash::class, 'options' => [], 'allowLegacyHashes' => true, 'legacyHashAlgorithms' => [ \TYPO3\CMS\Core\Crypto\PasswordHashing\BcryptPasswordHash::class, \TYPO3\CMS\Core\Crypto\PasswordHashing\PhpassPasswordHash::class, // 若旧版本使用md5加盐算法,补充下行配置即可 // \TYPO3\CMS\Core\Crypto\PasswordHashing\Md5SaltedPasswordHash::class, ] ];配置中
allowLegacyHashes必须设为true,且legacyHashAlgorithms数组必须覆盖存量密码用到的所有旧哈希算法。校验存量密码字段的格式完整性
部分升级过程中如果做过数据库字段迁移、旧数据清洗,可能会丢失fe_users表password字段的哈希前缀(比如bcrypt哈希的$2a$前缀、phpass哈希的$P$前缀),丢失前缀的哈希值无法被系统识别为合法密码哈希,会直接返回验证失败。可抽取1-2个已知密码的测试账号,核对其password字段值的前缀和旧算法的标识前缀是否一致。
配置完成后可拿测试老账号做验证:登录成功后查看数据库对应用户的password字段,若值变为
$argon2i$开头的格式,说明自动转换机制已正常生效,后续所有存量老用户首次登录时都会自动完成密码哈希的升级,不需要批量重置用户密码。
内容的提问来源于stack exchange,提问作者Ques

