首页 > 解决方案 > 没有 FosUserBundle 的 Symfony 忘记密码

问题描述

所以我正在尝试使用 symfony 创建一个拥有用户的网站。这些用户需要能够从他们的帐户中更改他们的密码(这应该不难,一个简单的表单,在提交时会更改当前的密码user)但是我正在努力设计一种实现“重置密码”的方法适用于完全忘记密码的用户。

我的计划是让用户收到一封带有唯一链接的电子邮件。当访问该链接时,symfony(通过slug标签)检查该链接是否在最后 5 分钟内发出。(可能需要一个带有链接列表的数据库,需要用户名时间)。然后用户将获得一个简单的表单,他们可以在其中输入新密码,然后被重定向到登录页面。

getUser我的问题是,当用户实际上没有经过身份验证时,我不能希望运行。即使我的时间、链接和用户名数据库可以指向特定用户,据我所知,Symfony 不会加载user类,直到它们通过密码正确验证。我该如何解决这个问题?我应该手动写入数据库而不涉及 securityBundle /user类吗?谢谢。

标签: phpsymfonyauthentication

解决方案


使用您的Repository/UserRepository类从数据库中获取User实体。修改User对象并使用EntityManager类持久化它。

$userRepo = $doctrine->getRepository( 'User' );

$user = $userRepo->find( $userId );

if ( $user !== null ) {

    $encryptedPassword = someHowEncryptThePassword( $plainPassword );
    $user->setPassword( $encryptedPassword );

    $em = $doctrine->getManager();
    $em->persist( $user );
    $em->flush();

}

推荐阅读