1. Go to this page and download the library: Download sensiolabs/connect-bundle 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/ */
// src/Controller/HomeController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
class HomeController extends AbstractController
{
/**
* @Route("/", name="home")
*/
public function home(Request $request)
{
$session = $request->hasSession() ? $request->getSession() : null;
// get the authentication error if there is one
if ($request->attributes->has(Security::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(Security::AUTHENTICATION_ERROR);
} elseif (null !== $session && $session->has(Security::AUTHENTICATION_ERROR)) {
$error = $session->get(Security::AUTHENTICATION_ERROR);
$session->remove(Security::AUTHENTICATION_ERROR);
} else {
$error = '';
}
return $this->render('home.html.twig', ['error' => $error]);
}
}
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use SymfonyCorp\Connect\Api\Entity\User as ConnectApiUser;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
*/
class User implements UserInterface
{
/** @ORM\Column(type="integer") @ORM\Id @ORM\GeneratedValue(strategy="AUTO") */
private $id;
/** @ORM\Column(type="string", length=255) */
private $uuid;
/** @ORM\Column(type="string", length=255) */
private $username;
/** @ORM\Column(type="string", length=255) */
private $name;
public function __construct($uuid)
{
$this->uuid = $uuid;
}
public function updateFromConnect(ConnectApiUser $apiUser)
{
$this->username = $apiUser->getUsername();
$this->name = $apiUser->getName();
}
public function getUuid()
{
return $this->uuid;
}
public function getUsername()
{
return $this->username;
}
public function getName()
{
return $this->name;
}
public function getRoles()
{
return ['ROLE_USER'];
}
public function getPassword()
{
}
public function getSalt()
{
}
public function eraseCredentials()
{
}
}
namespace App\Repository;
use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
class UserRepository extends ServiceEntityRepository implements UserProviderInterface
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, User::class);
}
public function loadUserByUsername($uuid)
{
return $this->findOneByUuid($uuid) ?: new User($uuid);
}
public function refreshUser(UserInterface $user)
{
if (!$user instanceof User) {
throw new UnsupportedUserException(sprintf('class %s is not supported', get_class($user)));
}
return $this->loadUserByUsername($user->getUuid());
}
public function supportsClass($class)
{
return User::class === $class;
}
}
namespace App\EventListener;
use Doctrine\ORM\EntityManagerInterface;
use SymfonyCorp\Connect\Security\Authentication\Token\ConnectToken;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Http\SecurityEvents;
class SecurityInteractiveLoginListener implements EventSubscriberInterface
{
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public function registerUser(InteractiveLoginEvent $event)
{
$token = $event->getAuthenticationToken();
if (!$token instanceof ConnectToken) {
return;
}
$user = $token->getUser();
$user->updateFromConnect($token->getApiUser());
$this->em->persist($user);
$this->em->flush($user);
}
public static function getSubscribedEvents()
{
return [
SecurityEvents::INTERACTIVE_LOGIN => 'registerUser',
];
}
}
twig
{# templates/home.html.twig #}
{% if app.user %}
Congrats! You are authenticated with SymfonyConnect
{% elseif error %}
{{ error.messageKey | trans(error.messageData, 'security') }}
{% else %}
<a href="{{ url('symfony_connect_login') }}">Log in with SymfonyConnect</a>
{% endif %}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.