/** * @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; }