Php Symfony忘记了没有FosUserBundle的密码

Php Symfony忘记了没有FosUserBundle的密码,php,symfony,authentication,Php,Symfony,Authentication,因此,我试图创建一个网站使用symfony,这将有用户。 这些用户需要能够在其帐户内更改其密码(这应该不难,一个简单的表单,在提交时更改当前用户的密码),但是我正在努力为完全忘记密码的用户设计一种实现“重设密码”的方法 我的计划是给用户发送一封带有唯一链接的电子邮件。访问该链接时,symfony(通过slug标记)检查该链接是否在过去5分钟内发送出去。(可能需要一个包含链接、用户名和时间列表的数据库)。然后,用户将得到一个简单的表单,可以在其中输入新密码,然后重定向到登录页面 我的问题是,当用户

因此,我试图创建一个网站使用symfony,这将有用户。 这些用户需要能够在其帐户内更改其密码(这应该不难,一个简单的表单,在提交时更改当前
用户的密码
),但是我正在努力为完全忘记密码的用户设计一种实现“重设密码”的方法

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


我的问题是,当用户没有真正经过身份验证时,我不能希望运行
getUser
。即使我的时间、链接和用户名数据库可以指向特定的用户,就我所见,Symfony也不会加载
user
类,直到它们通过密码正确验证。我该怎么做?我是否应该在不涉及securityBundle/
user
类的情况下手动写入数据库?谢谢。

您可以随时加载用户。当您处于重置页面且时间有效时,您还可以知道用户ID使用用户管理器或您的服务是什么,并更改用户密码

您可以随时加载用户。当您处于重置页面且时间有效时,您还可以知道用户ID使用用户管理器或您的服务是什么,并更改用户密码

使用
存储库/UserRepository
类从数据库中获取
用户
实体。修改
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();

}

使用
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();

}

在我看来,您应该在用户上存储具有关系的唯一链接

//Quick example
$user = $em->getRepository( 'App:User' )->findByEmail($email);

$lostPassword = new LostPassword();
$lostPassword->setUser($user);
$lostPassword->setHash(uniqid());
//Use hash to send the email to the user here
前面的代码是用户用电子邮件填写表单时的代码。保存用户和生成的哈希并发送电子邮件

在密码重置路径中,您只需获取散列并对其执行查找

 $lostPassword= $em->getRepository( 'App:LostPassword' )->findByHash($hash);
 $user = $lostPassword->getUser();
 //Your code managment to change the password

希望这有帮助。

我认为您应该在用户上存储带有关系的唯一链接

//Quick example
$user = $em->getRepository( 'App:User' )->findByEmail($email);

$lostPassword = new LostPassword();
$lostPassword->setUser($user);
$lostPassword->setHash(uniqid());
//Use hash to send the email to the user here
前面的代码是用户用电子邮件填写表单时的代码。保存用户和生成的哈希并发送电子邮件

在密码重置路径中,您只需获取散列并对其执行查找

 $lostPassword= $em->getRepository( 'App:LostPassword' )->findByHash($hash);
 $user = $lostPassword->getUser();
 //Your code managment to change the password
希望这有帮助