Symonfy 3 - 使用REST API重置密码的FOSUserBundle

Oud*_*and -1 php rest symfony fosuserbundle fosrestbundle

我正在开发一个RESTAPI Symfony 3.现在我想向用户发送一个重置密码的链接.这应该通过向以下内容发送请求来完成:

    "/resetpassword/{userEmail}"
Run Code Online (Sandbox Code Playgroud)

如何为用户创建重置密码的链接?我现在已经完成了如何通过我自己发送电子邮件,但不知道如何生成此链接或如何处理链接.

Mat*_*alo 6

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)