Last active
November 18, 2016 18:23
-
-
Save yahuarkuntur/5c7b4b5f9d05106219b8 to your computer and use it in GitHub Desktop.
My Integration of FosUserBundle and HWIOAuthBundle (symfony 2.7 and hwi/oauth-bundle 0.3.9)
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
fos_user: | |
db_driver: orm | |
firewall_name: main | |
user_class: AppBundle\Entity\Usuario | |
hwi_oauth: | |
firewall_name: main | |
fosub: | |
username_iterations: 30 | |
properties: | |
facebook: facebook_id | |
resource_owners: | |
facebook: | |
type: facebook | |
client_id: "%facebook_appid%" | |
client_secret: "%facebook_secret%" | |
scope: "email, public_profile, publish_actions" |
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
fos_user: | |
resource: "@FOSUserBundle/Resources/config/routing/all.xml" | |
hwi_oauth_login: | |
resource: "@HWIOAuthBundle/Resources/config/routing/login.xml" | |
prefix: /login | |
hwi_oauth_redirect: | |
resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml" | |
prefix: /connect | |
facebook_login: | |
path: /login/check-facebook | |
app: | |
resource: "@AppBundle/Controller/" | |
type: annotation | |
# your other routes |
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
security: | |
encoders: | |
AppBundle\Entity\Usuario: bcrypt | |
role_hierarchy: | |
ROLE_ADMIN: ROLE_USER | |
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] | |
providers: | |
fos_userbundle: | |
id: fos_user.user_provider.username_email | |
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_provider: security.csrf.token_manager | |
oauth: | |
resource_owners: | |
facebook: "/login/check-facebook" | |
login_path: /login | |
failure_path: /login | |
oauth_user_provider: | |
service: app.fos_user.oauth_provider | |
logout: true | |
anonymous: true | |
access_control: | |
- { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY } | |
- { path: ^/connect/, role: IS_AUTHENTICATED_ANONYMOUSLY } | |
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } | |
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } | |
- { path: ^/admin/, role: ROLE_ADMIN } | |
- { path: ^/, role: ROLE_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
services: | |
app.fos_user.oauth_provider: | |
class: AppBundle\Services\FOSUBUserProvider | |
arguments: [@fos_user.user_manager,{facebook: facebook_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
AppBundle\Entity\Usuario: | |
type: entity | |
table: usuario | |
indexes: | |
usuario_username_idx: | |
columns: [ username ] | |
id: | |
id: | |
type: integer | |
generator: { strategy: AUTO } | |
fields: | |
facebook_id: | |
type: string | |
length: 255 | |
nullable: true | |
facebook_access_token: | |
type: string | |
length: 255 | |
nullable: true |
can you check this please
http://stackoverflow.com/questions/39467905/integrate-fosuserbundle-and-hwioauthbundle
hi, i am new to hwiauth and fosuserbundle ,i am working with google login , i cant understand whats the use of connect(UserInterface $user, UserResponseInterface $response) while loadUserByOAuthUserResponse itself take care of registration and login
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I'm getting
Uncaught PHP Exception PropelException: "Unknown column Facebook_id in model FOS\UserBundle\Propel\User" at C:\xampp\htdocs\portalsportowy\vendor\propel\propel1\runtime\lib\query\ModelCriteria.php line 2145
Who can explain me why.
I do have:
fos_user:
db_driver: propel
firewall_name: main
user_class: Back\UserBundle\Model\User
and overriden the fosuerbundle schema.xml with extra facebookId var.
It's propel. Can you help me?