コード例 #1
0
 /**
  * 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);
     }
 }
コード例 #2
0
 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));
 }
コード例 #3
0
 /**
  * {@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;
 }