2017-01-02 69 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我也没有看到任何其他的选择,只是发送用户的随机密码与链接,用户可以登录,并有一个窗体,使用上面的代码更改密码 –