Last active
August 29, 2015 13:56
-
-
Save antoinemineau/8836621 to your computer and use it in GitHub Desktop.
Integrate FosUserBundle and HWIOAuthBundle
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace danvbe\UserBundle\Security\Core\User; | |
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface; | |
use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseClass; | |
use Symfony\Component\Security\Core\User\UserInterface; | |
class FOSUBUserProvider extends BaseClass | |
{ | |
/** | |
* {@inheritDoc} | |
*/ | |
public function connect(UserInterface $user, UserResponseInterface $response) | |
{ | |
$property = $this->getProperty($response); | |
$username = $response->getUsername(); | |
//on connect - get the access token and the user ID | |
$service = $response->getResourceOwner()->getName(); | |
$setter = 'set'.ucfirst($service); | |
$setter_id = $setter.'Id'; | |
$setter_token = $setter.'AccessToken'; | |
//we "disconnect" previously connected users | |
if (null !== $previousUser = $this->userManager->findUserBy(array($property => $username))) { | |
$previousUser->$setter_id(null); | |
$previousUser->$setter_token(null); | |
$this->userManager->updateUser($previousUser); | |
} | |
//we connect current user | |
$user->$setter_id($username); | |
$user->$setter_token($response->getAccessToken()); | |
$this->userManager->updateUser($user); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function loadUserByOAuthUserResponse(UserResponseInterface $response) | |
{ | |
$username = $response->getUsername(); | |
$service = $response->getResourceOwner()->getName(); | |
// if response is null, redirect to an error page | |
if ($response->getResponse() == null) { | |
throw new \Exception('Couldn\'t retrieve the API response of : '. $service); | |
} | |
$user = $this->userManager->findUserBy(array($this->getProperty($response) => $username)); | |
//when the user is registrating | |
if (null === $user) { | |
$setter = 'set'.ucfirst($service); | |
$setter_id = $setter.'Id'; | |
$setter_token = $setter.'AccessToken'; | |
// create new user here | |
$user = $this->userManager->createUser(); | |
$user->$setter_id($username); | |
$user->$setter_token($response->getAccessToken()); | |
//I have set all requested data with the user's username | |
//modify here with relevant data | |
$user->setUsername($username); | |
$user->setEmail($username); | |
$user->setPassword($username); | |
$user->setEnabled(true); | |
$this->userManager->updateUser($user); | |
return $user; | |
} | |
//if user exists - go with the HWIOAuth way | |
$user = parent::loadUserByOAuthUserResponse($response); | |
$serviceName = $response->getResourceOwner()->getName(); | |
$setter = 'set' . ucfirst($serviceName) . 'AccessToken'; | |
//update access token | |
$user->$setter($response->getAccessToken()); | |
return $user; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment