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