コード例 #1
0
 public function createPasswordAction(Request $request)
 {
     if (!$this->getUser() instanceof ExternalUser) {
         return $this->redirect($this->generateUrl('acts_camdram_homepage'));
     }
     $user = new User();
     $external_user = $this->getUser();
     $user->setName($external_user->getName());
     $user->setEmail($external_user->getEmail());
     $user->setPerson($external_user->getPerson());
     $user->setIsEmailVerified(true);
     //Raven accounts don't give us a name but the others do,
     //so need to decide whether to include a 'name' field in the form or not
     $type = new CreatePasswordType(!(bool) $user->getName());
     $form = $this->createForm($type, $user);
     if ($request->getMethod() == 'POST') {
         $form->submit($request);
         if ($form->isValid()) {
             /** @var \Acts\CamdramSecurityBundle\Entity\User $user */
             $user = $form->getData();
             $factory = $this->get('security.encoder_factory');
             $encoder = $factory->getEncoder($user);
             $password = $encoder->encodePassword($user->getPassword(), $user->getSalt());
             $user->setPassword($password);
             $user->addExternalUser($external_user);
             $external_user->setUser($user);
             $em = $this->getDoctrine()->getManager();
             $em->persist($user);
             $em->flush();
             $token = new UsernamePasswordToken($user, $user->getPassword(), 'public', $user->getRoles());
             $this->get('event_dispatcher')->dispatch(CamdramSecurityEvents::REGISTRATION_COMPLETE, new UserEvent($user));
             $this->get('security.context')->setToken($token);
             $this->get('camdram.security.authentication_success_handler')->onAuthenticationSuccess($request, $token);
             return $this->redirect($this->generateUrl('acts_camdram_security_create_account_complete'));
         }
     }
     return $this->render('ActsCamdramSecurityBundle:Default:create_password.html.twig', array('form' => $form->createView()));
 }