Last active
August 14, 2019 03:53
-
-
Save Rick-Mason/a63f968baf4fb828daa34123f3d89724 to your computer and use it in GitHub Desktop.
Symfony3 HWIOauthBundle FOSUBundle with Google Login
This file contains hidden or 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
| $bundles = [ | |
| // .... | |
| new FOS\UserBundle\FOSUserBundle(), | |
| new HWI\Bundle\OAuthBundle\HWIOAuthBundle(), | |
| //.... | |
| ]; |
This file contains hidden or 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
| //added to bottom of config file | |
| fos_user: | |
| db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel' | |
| firewall_name: main | |
| user_class: AppBundle\Entity\User | |
| hwi_oauth: | |
| firewall_names: [main] | |
| fosub: | |
| username_iterations: 30 | |
| properties: | |
| google: google_id | |
| resource_owners: | |
| google: | |
| type: google | |
| client_id: <the google client_id> | |
| client_secret: <the google secret> | |
| scope: "email profile" |
This file contains hidden or 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 AppBundle\Services; | |
| use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface; | |
| use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseClass; | |
| use Symfony\Component\Security\Core\User\UserInterface; | |
| /** | |
| * https://gist.github.com/danvbe/4476697 | |
| */ | |
| class FOSUBUserProvider extends BaseClass | |
| { | |
| 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); | |
| } | |
| public function loadUserByOAuthUserResponse(UserResponseInterface $response) | |
| { | |
| $data = $response->getResponse(); | |
| $username = $response->getUsername(); | |
| $email = $response->getEmail() ? $response->getEmail() : $username; | |
| $user = $this->userManager->findUserBy(array($this->getProperty($response) => $username)); | |
| //when the user is registrating | |
| if (null === $user) { | |
| $service = $response->getResourceOwner()->getName(); | |
| $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($email); | |
| $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; | |
| } | |
| } | |
This file contains hidden or 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
| app: | |
| resource: "@AppBundle/Controller/" | |
| type: annotation | |
| fos_user_security: | |
| resource: "@FOSUserBundle/Resources/config/routing/security.xml" | |
| fos_user_profile: | |
| resource: "@FOSUserBundle/Resources/config/routing/profile.xml" | |
| prefix: /profile | |
| fos_user_register: | |
| resource: "@FOSUserBundle/Resources/config/routing/registration.xml" | |
| prefix: /register | |
| fos_user_resetting: | |
| resource: "@FOSUserBundle/Resources/config/routing/resetting.xml" | |
| prefix: /resetting | |
| fos_user_change_password: | |
| resource: "@FOSUserBundle/Resources/config/routing/change_password.xml" | |
| prefix: /profile | |
| #hwi_oauth_login: | |
| hwi_oauth_security: | |
| resource: "@HWIOAuthBundle/Resources/config/routing/login.xml" | |
| prefix: /login | |
| hwi_oauth_connect: | |
| resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml" | |
| prefix: /login | |
| hwi_oauth_redirect: | |
| resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml" | |
| prefix: /login | |
| #the following route does not seem to be working | |
| google_login: | |
| path: /login/check-google |
This file contains hidden or 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
| # app/config/security.yml | |
| security: | |
| encoders: | |
| FOS\UserBundle\Model\UserInterface: bcrypt | |
| role_hierarchy: | |
| ROLE_ADMIN: ROLE_USER | |
| ROLE_SUPER_ADMIN: ROLE_ADMIN | |
| providers: | |
| fos_userbundle: | |
| id: fos_user.user_provider.username_email | |
| database_users: | |
| entity: | |
| class: AppBundle:MTI_Cart\User | |
| firewalls: | |
| dev: | |
| pattern: ^/(_(profiler|wdt)|css|images|js)/ | |
| security: false | |
| main: | |
| pattern: ^/ | |
| form_login: | |
| provider: fos_userbundle | |
| login_path: /login | |
| check_path: /login_check | |
| csrf_token_generator: security.csrf.token_manager | |
| oauth: | |
| resource_owners: | |
| google: "/login/check-google" | |
| login_path: /login | |
| failure_path: /login | |
| use_forward: false | |
| oauth_user_provider: | |
| service: my_user_provider | |
| anonymous: true | |
| login: | |
| pattern: ^/login$ | |
| security: false | |
| #remember_me: | |
| # key: "%secret%" | |
| # lifetime: 31536000 # 365 days in seconds | |
| # path: / | |
| # domain: ~ # Defaults to the current domain from $_SERVER | |
| access_control: | |
| - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } | |
| - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } | |
| - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } | |
| - { path: ^/admin/, role: ROLE_ADMIN } | |
This file contains hidden or 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
| # Learn more about services, parameters and containers at | |
| # http://symfony.com/doc/current/book/service_container.html | |
| parameters: | |
| my_user_provider.class: HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider | |
| services: | |
| # service_name: | |
| # class: AppBundle\Directory\ClassName | |
| # arguments: ["@another_service_name", "plain_value", "%parameter_name%"] | |
| my_user_provider: | |
| class: '%my_user_provider.class%' | |
| arguments: ['@fos_user.user_manager',{google: google_id}] |
This file contains hidden or 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 | |
| // src/AppBundle/Entity/User.php | |
| // dont forget to run ./bin/console doctrine:generate:entities to get your getters and setters | |
| namespace AppBundle\Entity; | |
| use FOS\UserBundle\Model\User as BaseUser; | |
| use Doctrine\ORM\Mapping as ORM; | |
| /** | |
| * @ORM\Entity | |
| * @ORM\Table(name="users") | |
| */ | |
| class User extends BaseUser | |
| { | |
| /** | |
| * @ORM\Id | |
| * @ORM\Column(type="integer") | |
| * @ORM\GeneratedValue(strategy="AUTO") | |
| */ | |
| protected $id; | |
| /** | |
| * @ORM\Column(name="google_id", type="string", length=255, nullable=true) | |
| */ | |
| protected $google_id; | |
| /** | |
| * @ORM\Column(name="google_access_token", type="string", length=255, nullable=true) | |
| */ | |
| protected $google_access_token; | |
| public function __construct() | |
| { | |
| parent::__construct(); | |
| // your own logic | |
| } | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment