code: public function createAction(Request $request)
      {
          $form = $this->getSetPasswordForm();
          $form->bind($request);
          if ($form->isValid()) {
              $em = $this->getDoctrine()->getManager();
              $user = $em->getRepository('Orkestra\Bundle\ApplicationBundle\Entity\User')->find($request->getSession()->get(PasswordSetController::CURRENT_USER_ID_KEY));
  
              if ($user) {
                  $password = $form->get('password')->getData();
                  $factory = $this->get('security.encoder_factory');
                  $encoder = $factory->getEncoder($user);
                  $user->setPassword($encoder->encodePassword($password, $user->getSalt()));
  
                  $em->persist($user);
                  $em->flush();
                  $this->get('session')->getFlashBag()->set('success', 'Your password has been set.');
  
                  return $this->redirect($this->generateUrl('login'));
              }
          }
  
          return new JsonErrorResponse('The passwords provided do not match.');
      }
docs: Resets a user's password and emails them the temporary password
  
  @Route("/set-password", name="orkestra_password_set_create", defaults={"_format"="json"})
  @Method("POST")