2017-01-02 31 views
1

我試圖創建一個表單來註冊新用戶,而不需要定義他們的密碼。這個想法是保存新用戶,然後通過fos用戶包中的重置密碼過程要求更改密碼。請求用不同的控制器重置密碼與fos用戶包

我無法確定如何觸發在控制器中重置密碼的過程。

這裏是我的控制器的一部分提交:

if ($request->getMethod() === 'POST') { 

     $form->bind($request); 
     if ($form->isValid()) { 

      $tokenGenerator = $this->get('fos_user.util.token_generator'); 
      $password = substr($tokenGenerator->generateToken(), 0, 8); 

      $user->setEnabled(false); 
      $user->setPlainPassword($password); 

      /** @var $dispatcher EventDispatcherInterface */ 
      $dispatcher = $this->container->get('event_dispatcher'); 
      $event = new GetResponseUserEvent($user, $request); 

      $userManager->updatePassword($user); 
      $userManager->updateUser($user); 

      $em->persist($user); 
      $em->flush(); 

      // Is this isn't supposed to send an email to the newly created user asking to change his password ? 
      $dispatcher->dispatch(FOSUserEvents::RESETTING_RESET_REQUEST, $event); 

      return new RedirectResponse($this->generateUrl('some_url')); 
     } 
    } 

如上代碼註釋:

這是不應該發送電子郵件到新創建的用戶要求更改密碼?

$dispatcher->dispatch(FOSUserEvents::RESETTING_RESET_REQUEST, $event); 
+1

爲什麼不只是一個臨時隨機產生密碼的連接,然後將新用戶到數據庫因爲您可能希望在用戶註冊後第一次發送不同的文本,而不是在密碼重置後發送電子郵件給用戶。 –

+0

當然,我可以自己做所有的事情,但我最終會發送一封電子郵件,最終鏈接到fos用戶的重置密碼操作。我可能是錯的,但是直接調用fos用戶包(最終在別的地方最終使用一些自定義模板或重寫控制器)並不是一個更好的方法,並讓它按照它的設計處理工作? –

+0

編號註冊從來不是一個密碼重置在我看來。但是如果可能的話,你仍然可以使用這個包的一部分。 –

回答

1

也許它可以幫助你,我解決了它這種方式

設定的UserManager新密碼

$userManager = $this->get('fos_user.user_manager'); 
$entity->setPlainPassword("123");      
$userManager->updateUser($entity); 
+0

我已經在我提供的代碼中執行此操作。這不是我想要實現的。我想要做的是創建一個新的用戶,需要某種「需要重置密碼」狀態。我已經設置了一個隨機密碼,我雖然可以提供這個「狀態」,並處理其餘的操作。 –

+0

hmn我也沒有看到任何其他的選擇,只是發送用戶的隨機密碼與鏈接,用戶可以登錄,並有一個窗體,使用上面的代碼更改密碼 –