symmonfy 3 - FOSUserBundle重置密码与REST API


Symonfy 3 - FOSUserBundle reset password with REST API

我正在开发一个 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);
    }