如何在用户提交密码重置请求时刷新fos_user令牌及配置新令牌生成?
FOSUserBundle 密码重置令牌刷新与配置说明
手动刷新并生成新令牌的操作步骤
当处理用户的密码重置请求(resetting/request)时,可按以下步骤手动刷新令牌:
- 通过邮箱或用户名查询到对应的用户实体
- 生成安全的唯一令牌,替换用户现有令牌:
// 生成符合URL安全标准的随机令牌 $token = rtrim(strtr(base64_encode(random_bytes(32)), '+/', '-_'), '='); $user->setConfirmationToken($token); - 更新密码重置请求的时间戳,保证令牌有效期计算准确:
$user->setPasswordRequestedAt(new \DateTime()); - 将更新后的用户实体持久化到数据库:
$entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($user); $entityManager->flush(); - 调用FOSUser内置邮件服务,发送包含新令牌的重置邮件:
$mailer = $this->get('fos_user.mailer'); $mailer->sendResettingEmailMessage($user);
配置项控制每次请求生成新令牌
在FOSUserBundle的配置文件(通常为config/packages/fos_user.yaml)中,找到resetting节点,设置always_generate_new_token为true即可。开启该配置后,每次用户提交密码重置请求时,系统会自动生成新令牌并覆盖旧令牌:
fos_user: # 其他配置(如用户类、防火墙映射等)... resetting: token_ttl: 86400 # 令牌有效期,单位:秒 always_generate_new_token: true # 控制每次请求生成新令牌的核心配置 email: template: '@FOSUser/Resetting/email.txt.twig' # 重置邮件模板路径
内容的提问来源于stack exchange,提问作者Dev Git
相关产品推荐
相关产品推荐

