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 Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use BeyondBlueSky\OAuth2PKCEClient\Entity\OAuth2Session;
use BeyondBlueSky\OAuth2PKCEClient\DependencyInjection\OAuth2PKCEClientExtension as OAuth2PKCEClient;
/**
* Default App controller.
*
* @Route("/oauth2")
*/
class OAuth2Controller extends AbstractController
{
/**
* @Route("/login", name="oauth_login", methods={"GET"})
*/
public function oauthLogin(Request $request, OAuth2PKCEClient $oauth2)
{
$session = new OAuth2Session();
$response= $oauth2->getAuthRedirect($session);
$this->getDoctrine()->getManager()->persist($session);
$this->getDoctrine()->getManager()->flush();
return $response;
}
/**
* @Route("/check", name="oauth_check", methods={"GET"})
*/
public function oauthRedirect(Request $request)
{
$user= $this->getUser();
if ($user == null ) {
return new Response(json_encode( ['status' => false, 'message' => "User not found!"] ) );
} else {
return $this->redirectToRoute('homepage');
}
}
}
class User implements \Symfony\Component\Security\Core\User\UserInterface
public function getRoles(): array {
return ['ROLE_USER'];
}
public function getPassword() {
return "-";
}
public function getSalt() {
return 1;
}
public function eraseCredentials() {
return ;
}
public function getUsername(): string {
return $this->email;
}
namespace App\Security;
use App\Entity\Security\User;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Doctrine\ORM\EntityManagerInterface;
use BeyondBlueSky\OAuth2PKCEClient\DependencyInjection\OAuth2PKCEClientExtension as OAuth2PKCEClient;
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, UserProviderInterface $userProvider)
{
// With this function we fetch the user's data from the credentials
$oauthUser = $this->fetchUser($credentials);
$login = $oauthUser->login;
$user = $this->em->getRepository(User::class)->findOneBy(['username' => $login]);
if (! $user ) {
// Now we have to adapt to our local User
$user = new User();
$user->setUsername($oauthUser->login);
$user->setEmail($oauthUser->email);
$user->setName($oauthUser->name);
$user->setSurname1($oauthUser->surname1);
$user->setSurname2($oauthUser->surname2);
$user->setPassword('-');
$user->setRoles(['ROLE_USER']);
//$user->setFullname($oauthUser['name']. " ".$oauthUser['surname1']. " ".$oauthUser['surname2']);
$user->setCreatedAt(new \DateTime(date('Y-m-d H:i:s')));
$this->em->persist($user);
$this->em->flush();
}
return $user;
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.