2016-10-25 4 views
-1

私はSymfony 3REST APIを開発していてパスワードをリセットFOSUserBundle。今私は彼のパスワードをリセットするためのリンクをユーザーに送信したい。これは次のようにリクエストを送信することにより行われるべきである:Symonfy 3 - RESTのAPI

"/resetpassword/{userEmail}" 

はどうやってパスワードをリセットするユーザーのためのリンクを作成することができますか?私はすでに自分自身でメールを送信する方法を今までにまとめましたが、このリンクを生成する方法やリンクをどのように処理するのかについては考えていません。

+0

一意のIDを生成し、これをテーブルuserに「password_key」のようなフィールドに格納する必要があります。ユーザーがそれをクリックすると、彼のpwd(電子メール、pwd、pwdの確認)をリセットするフォームを表示します。方法をリセットする際に、渡された一意のIDがこの特定のユーザーのデータベースにあるものであることを確認してください – 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); 
    }