Created
September 3, 2021 16:31
-
-
Save tomgif/a13d6809dfcc6b71de8feb4cb01ca88e to your computer and use it in GitHub Desktop.
VkOAuthProvider for knpuniversity / oauth2-client-bundle
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
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 |
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 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); | |
} | |
} |
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 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