Skip to content

Instantly share code, notes, and snippets.

@tomgif
Created September 3, 2021 16:31
Show Gist options
  • Save tomgif/a13d6809dfcc6b71de8feb4cb01ca88e to your computer and use it in GitHub Desktop.
Save tomgif/a13d6809dfcc6b71de8feb4cb01ca88e to your computer and use it in GitHub Desktop.
VkOAuthProvider for knpuniversity / oauth2-client-bundle
knpu_oauth2_client:
clients:
vk:
type: generic
provider_class: App\Security\Providers\Vk\Vk
client_id: '%env(OAUTH_VK_CLIENT_ID)%'
client_secret: '%env(OAUTH_VK_CLIENT_SECRET)%'
redirect_route: '%env(OAUTH_VK_REDIRECT_URI)%'
use_state: false
<?php
namespace App\Security\Providers\Vk;
use League\OAuth2\Client\Provider\AbstractProvider;
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
use League\OAuth2\Client\Provider\ResourceOwnerInterface;
use League\OAuth2\Client\Token\AccessToken;
use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
use Psr\Http\Message\ResponseInterface;
class Vk extends AbstractProvider
{
use BearerAuthorizationTrait;
protected string $version = '5.131';
protected ?string $lang = null;
protected array $fields = ['id'];
public function getBaseAuthorizationUrl(): string
{
return 'https://oauth.vk.com/authorize';
}
public function getBaseAccessTokenUrl(array $params): string
{
return 'https://oauth.vk.com/access_token';
}
public function getResourceOwnerDetailsUrl(AccessToken $token): string
{
$query = $this->buildQueryString([
'fields' => $this->fields,
'access_token' => $token->getToken(),
'v' => $this->version,
'lang' => $this->lang
]);
return "https://api.vk.com/method/users.get?$query";
}
protected function getDefaultScopes(): array
{
return ['email'];
}
protected function checkResponse(ResponseInterface $response, $data)
{
if (empty($data['error'])) {
return;
}
throw new IdentityProviderException($data['error'], 0, $data);
}
protected function createResourceOwner(array $response, AccessToken $token): ResourceOwnerInterface
{
return new VkUser($response);
}
}
<?php
namespace App\Security\Providers\Vk;
use League\OAuth2\Client\Provider\ResourceOwnerInterface;
class VkUser implements ResourceOwnerInterface
{
private array $response;
public function __construct(array $response)
{
$this->response = $response;
}
public function getId()
{
return $this->response['id'];
}
public function getEmail(): ?string
{
return $this->response['email'] || null;
}
public function toArray(): array
{
return $this->response;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment