PHP code example of beyondbluesky / oauth2-pkce-client
1. Go to this page and download the library: Download beyondbluesky/oauth2-pkce-client library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
beyondbluesky / oauth2-pkce-client example snippets
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use BeyondBlueSky\OAuth2PKCEClient\DependencyInjection\OAuth2PKCEClientExtension as OAuth2PKCEClient;
use BeyondBlueSky\OAuth2PKCEClient\Entity\OAuth2Session;
#[Route('/oauth2')]
class OAuth2Controller extends AbstractController
{
#[Route('/login', name: 'oauth_login', methods: ['GET'])]
public function oauthLogin(OAuth2PKCEClient $oauth2, EntityManagerInterface $entityManager): Response
{
$session = new OAuth2Session();
$response = $oauth2->getAuthRedirect($session);
$entityManager->persist($session);
$entityManager->flush();
return $response;
}
#[Route('/check', name: 'oauth_check', methods: ['GET'])]
public function oauthRedirect(Request $request): Response
{
return $this->redirectToRoute('homepage');
}
}
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
public function getUserIdentifier(): string
{
return $this->username;
}
public function getRoles(): array
{
return ['ROLE_USER'];
}
public function getPassword(): string
{
return '-';
}
public function eraseCredentials(): void
{
}
}
namespace App\Security;
use App\Entity\Security\User;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\User\UserInterface;
use BeyondBlueSky\OAuth2PKCEClient\Security\OAuth2PKCEAuthenticator;
class OAuth2Authenticator extends OAuth2PKCEAuthenticator
{
public function supports(Request $request): bool
{
return $request->getPathInfo() === '/oauth2/check' && $request->isMethod('GET');
}
public function getUser($credentials): ?UserInterface
{
$oauthUser = $this->fetchUser($credentials);
$user = $this->em->getRepository(User::class)->findOneBy([
'username' => $oauthUser->login,
]);
if (! $user) {
$user = new User();
$user->setUsername($oauthUser->login);
$user->setEmail($oauthUser->email ?? null);
$user->setPassword('-');
$user->setRoles(['ROLE_USER']);
$this->em->persist($user);
$this->em->flush();
}
return $user;
}
}