2016-10-25 12 views
-1

Я разрабатываю REST API с Symfony 3. Теперь я хочу отправить пользователю ссылку для сброса пароля. Это должно быть сделано, отправив запрос на что-то вроде:Symonfy 3 - FOSUserBundle сброса пароля с REST API

"/resetpassword/{userEmail}" 

Как я могу создать ссылку для пользователя, чтобы сбросить пароль? Я уже сейчас, как отправить электронное письмо самостоятельно, но не как создать эту ссылку или как обрабатывать ссылку.

+0

Вы должны сгенерировать уникальный идентификатор, сохранить его в пользователе таблицы в поле типа «password_key». Когда пользователь нажмет на него, отобразите форму для сброса своего pwd (подтверждение по электронной почте, pwd, pwd). В методе сброса проверьте, прошел ли уникальный идентификатор, который у вас есть в вашей базе данных для этого конкретного пользователя. – Delphine

+0

Спасибо, это мне помогло! – Oudstand

+0

Добро пожаловать;) – Delphine

ответ

5

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); 
    }