我正在开发一个 REST
API与 Symfony 3
。现在我想给用户发送一个链接来重置他的密码。这应该通过发送请求来完成,例如:
"/resetpassword/{userEmail}"
如何为用户创建重置密码的链接?我已经准备好现在如何发送电子邮件由我自己,但不知道如何生成此链接或如何处理链接。
FOSUserBundle已经具备了所有需要的功能。
1)从请求的电子邮件中找到用户
2)检查当前用户是否已经请求新密码
3)为用户生成确认令牌
4)使用FOSUserBundle邮件发送器实现发送重置邮件消息
5)更新用户
6)返回响应
你可以这样做:
/**
* @Route("/resetpassword/{userEmail}", name="user_password_reset-request")
* @Method("GET")
*/
public function resetPasswordRequestAction(Request $request)
{
$email = $request->query->get('userEmail');
$user = $this->get('fos_user.user_manager')->findUserByEmail($email);
if (null === $user) {
throw $this->createNotFoundException();
}
if ($user->isPasswordRequestNonExpired($this->container->getParameter('fos_user.resetting.token_ttl'))) {
throw new BadRequestHttpException('Password request alerady requested');
}
if (null === $user->getConfirmationToken()) {
/** @var $tokenGenerator 'FOS'UserBundle'Util'TokenGeneratorInterface */
$tokenGenerator = $this->get('fos_user.util.token_generator');
$user->setConfirmationToken($tokenGenerator->generateToken());
}
$this->get('fos_user.mailer')->sendResettingEmailMessage($user);
$user->setPasswordRequestedAt(new 'DateTime());
$this->get('fos_user.user_manager')->updateUser($user);
return new Response(Response::HTTP_OK);
}