/** * Enforces that the given user will have an username * @param \FOS\UserBundle\Model\UserInterface $user */ public function enforceUsername(UserInterface $user) { $current = $user->getUsernameCanonical(); if (is_null($current) || strlen($current) == 0) { $email = explode('@', $user->getEmailCanonical(), 2); $username = $email[0]; if (!UsernameValidator::isUsernameValid($username)) { $username = UsernameValidator::getValidUsername(); } $newUsername = $this->getNextAvailableUsername($username); $user->setUsername($newUsername); $this->updateCanonicalFields($user); } }
public function onRegistrationSuccess(FormEvent $event) { $user = $event->getForm()->getData(); if (null === $user->getConfirmationToken()) { $user->setConfirmationToken($this->tokenGenerator->generateToken()); $user->setEmailExpiration(new \DateTime("+{$this->emailUnconfirmedTime}")); } if ($this->em->getRepository('PROCERGSLoginCidadaoCoreBundle:Person')->findOneBy(array('emailCanonical' => $user->getEmailCanonical()))) { throw new LcEmailException('registration.email.registered'); } $key = '_security.main.target_path'; if ($this->session->has($key)) { //this is to be catch by loggedinUserListener.php return $event->setResponse(new RedirectResponse($this->router->generate('lc_home'))); } $email = explode('@', $user->getEmailCanonical(), 2); $username = $email[0]; if (!UsernameValidator::isUsernameValid($username)) { $url = $this->router->generate('lc_update_username'); } else { $url = $this->router->generate('fos_user_profile_edit'); } $event->setResponse(new RedirectResponse($url)); }
/** * {@inheritDoc} */ public function loadUserByOAuthUserResponse(UserResponseInterface $response) { $rawResponse = $response->getResponse(); $username = $response->getUsername(); $screenName = $response->getNickname(); $service = $response->getResourceOwner()->getName(); $setter = 'set' . ucfirst($service); $setter_id = $setter . 'Id'; $setter_token = $setter . 'AccessToken'; $setter_username = $setter . 'Username'; $newUser = false; $user = $this->userManager->findUserBy(array("{$service}Id" => $username)); if (null === $user) { switch ($service) { case 'twitter': $email = $this->session->get('twitter.email'); if (!$email) { throw new MissingEmailException(); } else { $this->session->remove('twitter.email'); } $defaultUsername = "******"; break; case 'google': $email = $rawResponse['email']; $defaultUsername = $email; break; default: $email = $rawResponse['email']; $defaultUsername = $email; break; } $newUser = true; $user = $this->userManager->createUser(); $user->{$setter_id}($username); $user->{$setter_token}($response->getAccessToken()); $user->{$setter_username}($screenName); $fullName = explode(' ', $response->getRealName(), 2); if (isset($fullName[0][1]) && $fullName[0][1] != '') { $user->setFirstName($fullName[0]); } if (isset($fullName[1][1]) && $fullName[1][1] != '') { $user->setSurname($fullName[1]); } if (!UsernameValidator::isUsernameValid($screenName)) { $screenName = UsernameValidator::getValidUsername(); } $availableUsername = $this->userManager->getNextAvailableUsername($screenName, 10, $defaultUsername); $user->setUsername($availableUsername); $user->setEmail($email); $user->setPassword(''); $user->setEnabled(true); $this->userManager->updateCanonicalFields($user); $form = $this->formFactory->createForm(); $form->setData($user); $request = $this->container->get('request'); $eventResponse = new \Symfony\Component\HttpFoundation\RedirectResponse('/'); $event = new FormEvent($form, $request); if ($newUser) { $this->dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event); } $this->userManager->updateUser($user); if ($newUser) { $this->dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $eventResponse)); } return $user; } $user = parent::loadUserByOAuthUserResponse($response); $serviceName = $response->getResourceOwner()->getName(); $setter = 'set' . ucfirst($serviceName) . 'AccessToken'; $user->{$setter}($response->getAccessToken()); return $user; }