Oud*_*and -1 php rest symfony fosuserbundle fosrestbundle
我正在开发一个REST
API Symfony 3
.现在我想向用户发送一个重置密码的链接.这应该通过向以下内容发送请求来完成:
"/resetpassword/{userEmail}"
Run Code Online (Sandbox Code Playgroud)
如何为用户创建重置密码的链接?我现在已经完成了如何通过我自己发送电子邮件,但不知道如何生成此链接或如何处理链接.
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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2008 次 |
最近记录: |