working with twitter oauth

This commit is contained in:
Kayn Ty 2018-04-25 17:32:44 +02:00
parent a26fe90062
commit 4a4a0b8596
12 changed files with 148 additions and 12 deletions

View File

@ -5,7 +5,7 @@
<span>{{ error }}</span> <span>{{ error }}</span>
{% endif %} {% endif %}
<a class="btn btn-default btn-block btn-{{ "twitter" }}" href="{{ hwi_oauth_login_url("twitter") }}"> <a class="btn btn-default btn-{{ "twitter" }}" href="{{ hwi_oauth_login_url("twitter") }}">
<i class="fa fa-{{ "twitter" }}"></i> <i class="fa fa-{{ "twitter" }}"></i>
{{ "twitter" | trans({}, 'HWIOAuthBundle') }} {{ "twitter" | trans({}, 'HWIOAuthBundle') }}
</a> </a>

View File

@ -117,7 +117,7 @@
{#Via {{ 'disqus' | trans({}, 'HWIOAuthBundle') }}#} {#Via {{ 'disqus' | trans({}, 'HWIOAuthBundle') }}#}
{#</a>#} {#</a>#}
<h1 class="text-right"> <h1 class="text-right">
<a class="btn btn-default btn-block btn-{{ "twitter" }}" <a class="btn btn-default btn-{{ "twitter" }}"
href="{{ hwi_oauth_login_url("twitter") }}"> href="{{ hwi_oauth_login_url("twitter") }}">
<i class="fa fa-{{ "twitter" }}"></i> <i class="fa fa-{{ "twitter" }}"></i>
{{ "twitter" | trans({}, 'HWIOAuthBundle') }} {{ "twitter" | trans({}, 'HWIOAuthBundle') }}

View File

@ -86,6 +86,8 @@ fos_user:
hwi_oauth: hwi_oauth:
# list of names of the firewalls in which this bundle is active, this setting MUST be set # list of names of the firewalls in which this bundle is active, this setting MUST be set
firewall_names: [secured_area] firewall_names: [secured_area]
connect:
account_connector: my.custom.user_provider
fosub: fosub:
username_iterations: 30 username_iterations: 30
properties: properties:

View File

@ -4,10 +4,12 @@ parameters:
#parameter_name: value #parameter_name: value
services: services:
em:
alias: doctrine.orm.entity_manager
# default configuration for services in *this* file # default configuration for services in *this* file
_defaults: _defaults:
# automatically injects dependencies in your services # automatically injects dependencies in your services
autowire: true autowire: false
# automatically registers your services as commands, event subscribers, etc. # automatically registers your services as commands, event subscribers, etc.
autoconfigure: true autoconfigure: true
# this means you cannot fetch services directly from the container via $container->get() # this means you cannot fetch services directly from the container via $container->get()
@ -39,7 +41,11 @@ services:
arguments: arguments:
- '@fos_user.user_manager' - '@fos_user.user_manager'
- ['@fos_user.user_manager', twitter: twitter_id] - ['@fos_user.user_manager', twitter: twitter_id]
- 'doctrine.orm.default_entity_manager'
my.custom.user_provider: my.custom.user_provider:
class: AppBundle\Security\Core\User\MyFOSUBUserProvider class: AppBundle\Security\Core\User\MyFOSUBUserProvider
arguments: ['@fos_user.user_manager', {twitter: twitter_id}] arguments:
- '@fos_user.user_manager'
- ['@fos_user.user_manager', twitter: twitter_id]
- '@doctrine.orm.default_entity_manager'

0
src/AppBundle/Entity/Festival.php Executable file → Normal file
View File

0
src/AppBundle/Entity/Product.php Executable file → Normal file
View File

0
src/AppBundle/Entity/ProductCategory.php Executable file → Normal file
View File

0
src/AppBundle/Entity/ProductSold.php Executable file → Normal file
View File

0
src/AppBundle/Entity/SellRecord.php Executable file → Normal file
View File

31
src/AppBundle/Entity/User.php Executable file → Normal file
View File

@ -25,11 +25,12 @@ class User extends BaseUser {
* @ORM\Column(name="twitter_id", type="string", length=255, nullable=true) * @ORM\Column(name="twitter_id", type="string", length=255, nullable=true)
*/ */
private $twitterId; private $twitterId;
private $twitterAccessToken;
/** /**
* @ORM\Column(name="disqus_id", type="string", length=255, nullable=true) * @ORM\Column(name="disqus_id", type="string", length=255, nullable=true)
*/ */
private $disqusId; private $disqusId;
private $disqusAccessToken;
/** /**
* @ORM\Column(name="google_id", type="string", length=255, nullable=true) * @ORM\Column(name="google_id", type="string", length=255, nullable=true)
*/ */
@ -126,6 +127,34 @@ class User extends BaseUser {
$this->googleAccessToken = $googleAccessToken; $this->googleAccessToken = $googleAccessToken;
} }
/**
* @return mixed
*/
public function getDisqusAccessToken() {
return $this->disqusAccessToken;
}
/**
* @param mixed $disqusAccessToken
*/
public function setDisqusAccessToken( $disqusAccessToken ) {
$this->disqusAccessToken = $disqusAccessToken;
}
/**
* @return mixed
*/
public function getTwitterAccessToken() {
return $this->twitterAccessToken;
}
/**
* @param mixed $twitterAccessToken
*/
public function setTwitterAccessToken( $TwitterAccessToken ) {
$this->twitterAccessToken = $TwitterAccessToken;
}
/** /**
* @return mixed * @return mixed
*/ */

View File

@ -25,11 +25,12 @@ class User extends BaseUser {
* @ORM\Column(name="twitter_id", type="string", length=255, nullable=true) * @ORM\Column(name="twitter_id", type="string", length=255, nullable=true)
*/ */
private $twitterId; private $twitterId;
private $twitterAccessToken;
/** /**
* @ORM\Column(name="disqus_id", type="string", length=255, nullable=true) * @ORM\Column(name="disqus_id", type="string", length=255, nullable=true)
*/ */
private $disqusId; private $disqusId;
private $disqusAccessToken;
/** /**
* @ORM\Column(name="google_id", type="string", length=255, nullable=true) * @ORM\Column(name="google_id", type="string", length=255, nullable=true)
*/ */
@ -314,4 +315,48 @@ class User extends BaseUser {
public function getActiveFestival() { public function getActiveFestival() {
return $this->activeFestival; return $this->activeFestival;
} }
/**
* Set twitterId.
*
* @param string|null $twitterId
*
* @return User
*/
public function setTwitterId( $twitterId = null ) {
$this->twitterId = $twitterId;
return $this;
}
/**
* Get twitterId.
*
* @return string|null
*/
public function getTwitterId() {
return $this->twitterId;
}
/**
* Set disqusId.
*
* @param string|null $disqusId
*
* @return User
*/
public function setDisqusId( $disqusId = null ) {
$this->disqusId = $disqusId;
return $this;
}
/**
* Get disqusId.
*
* @return string|null
*/
public function getDisqusId() {
return $this->disqusId;
}
} }

View File

@ -3,15 +3,39 @@
namespace AppBundle\Security\Core\User; namespace AppBundle\Security\Core\User;
use AppBundle\Entity\User; use AppBundle\Entity\User;
use Doctrine\ORM\EntityManager;
use FOS\UserBundle\Model\UserManagerInterface;
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface; use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseFOSUBProvider; use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseFOSUBProvider;
use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserInterface;
class MyFOSUBUserProvider extends BaseFOSUBProvider { class MyFOSUBUserProvider extends BaseFOSUBProvider {
private $em;
/**
* MyFOSUBUserProvider constructor.
*
* @param UserManagerInterface $userManager
* @param array $properties
* @param EntityManager $em
*/
public function __construct(
UserManagerInterface $userManager,
array $properties,
EntityManager $em
) {
$this->em = $em;
parent::__construct( $userManager, $properties );
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function connect( UserInterface $user, UserResponseInterface $response ) { public
function connect(
UserInterface $user,
UserResponseInterface $response
) {
// get property from provider configuration by provider name // get property from provider configuration by provider name
// , it will return `facebook_id` in that case (see service definition below) // , it will return `facebook_id` in that case (see service definition below)
$property = $this->getProperty( $response ); $property = $this->getProperty( $response );
@ -33,24 +57,54 @@ class MyFOSUBUserProvider extends BaseFOSUBProvider {
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
public function loadUserByOAuthUserResponse( UserResponseInterface $response ) { public
function loadUserByOAuthUserResponse(
UserResponseInterface $response
) {
$userEmail = $response->getEmail(); $userEmail = $response->getEmail();
$user = $this->userManager->findUserByEmail( $userEmail ); $username = $response->getRealName();
$user = null;
$em = $this->em;
if ( $userEmail ) {
$user = $this->userManager->findUserByEmail( $userEmail );
} elseif ( $username ) {
$user = $this->userManager->findUserByUsername( $username );
}
// if null just create new user and set it properties // if null just create new user and set it properties
if ( null === $user ) { if ( null === $user ) {
$username = $response->getRealName();
$user = new User(); $user = new User();
$user->setUsername( $username ); $data = $response->getData();
if ( ! $userEmail ) {
$ressourceOwner = $response->getResourceOwner();
$userEmail = $username . '@' . $ressourceOwner->getName() . '.com';
}
if ( $ressourceOwner == 'twitter' ) {
$userId = $data[ "id" ];
$user->setTwitterId( $userId );
}
$user
->setUsername( $username )
->setPassword( 'sdfvjsdjfsdsjmldfvlkjsdkjlqlkjef56f4sr46g58s6z8r4g+97sr47hz+4' )
->setEmail( $userEmail )
->setEmailCanonical( $userEmail );
// ... save user to database // ... save user to database
$em->persist( $user );
$em->flush();
return $user; return $user;
} }
// else update access token of existing user // else update access token of existing user
$serviceName = $response->getResourceOwner()->getName(); $serviceName = $response->getResourceOwner()->getName();
$setter = 'set' . ucfirst( $serviceName ) . 'AccessToken'; $setter = 'set' . ucfirst( $serviceName ) . 'AccessToken';
$user->$setter( $response->getAccessToken() );//update access token $user->$setter( $response->getAccessToken() );//update access token
$em->persist( $user );
$em->flush();
return $user; return $user;
} }