Example #1
0
 /**
  * @param UserResponseInterface $response
  * @return User
  * @throws \InvalidArgumentException
  */
 public static function fromOAuthResponse(UserResponseInterface $response)
 {
     $user = new self();
     $user->setPassword('whatever');
     $user->setEnabled(true);
     switch ($response->getResourceOwner()->getName()) {
         case 'facebook':
             $user->setFacebookId($response->getResponse()['id']);
             $user->setUsername('fb-' . $response->getResponse()['id']);
             $user->setDisplayableName($response->getResponse()['name']);
             if (isset($response->getResponse()['email']) && $response->getResponse()['email']) {
                 $user->setEmail($response->getResponse()['email']);
             } else {
                 $user->setEmail('fb-no-email-' . md5(rand()) . '@example.com');
             }
             $user->setPictureUrl($response->getResponse()['picture']['data']['url']);
             break;
         case 'vkontakte':
             $responseInner = $response->getResponse()['response'][0];
             $user->setVkontakteId($responseInner['uid']);
             $user->setUsername('vk-' . $responseInner['uid']);
             $user->setDisplayableName($responseInner['first_name'] . ' ' . $responseInner['last_name']);
             if ($response->getResponse()['email']) {
                 $user->setEmail($response->getResponse()['email']);
             } else {
                 //in VK user can hide his email, but FOS treats email as mandatory
                 $user->setEmail('vk-hidden-email-' . md5(rand()) . '@example.com');
             }
             $user->setPictureUrl($responseInner['photo_medium']);
             break;
         case 'twitter':
             $user->setTwitterId($response->getResponse()['id']);
             $user->setUsername('twitter-' . $response->getResponse()['id']);
             $user->setDisplayableName($response->getResponse()['name']);
             $user->setEmail('twitter-email-' . md5(rand()) . '@example.com');
             $user->setPictureUrl($response->getResponse()['profile_image_url']);
             break;
         case 'google':
             $user->setGoogleId($response->getResponse()['id']);
             $user->setUsername('google-' . $response->getResponse()['id']);
             $user->setDisplayableName($response->getResponse()['name']);
             $user->setEmail($response->getResponse()['email']);
             $user->setPictureUrl($response->getResponse()['picture']);
             break;
         default:
             throw new \InvalidArgumentException(sprintf('Resource owner `%` is not supported', $response->getResourceOwner()->getName()));
     }
     return $user;
 }