Skip to content

Commit 73808f1

Browse files
committed
Authenticate user on registration
1 parent 0c8fa01 commit 73808f1

2 files changed

Lines changed: 17 additions & 8 deletions

File tree

src/Controller/Dashboard/DashboardSecurityController.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use CodedMonkey\Dirigent\Doctrine\Repository\UserRepository;
77
use CodedMonkey\Dirigent\Form\RegistrationFormType;
88
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
9+
use Symfony\Bundle\SecurityBundle\Security;
910
use Symfony\Component\HttpFoundation\Request;
1011
use Symfony\Component\HttpFoundation\Response;
1112
use Symfony\Component\Routing\Attribute\Route;
@@ -21,9 +22,7 @@ public function __construct(
2122
#[Route('/login', name: 'dashboard_login')]
2223
public function login(AuthenticationUtils $authenticationUtils): Response
2324
{
24-
$userCount = $this->userRepository->count([]);
25-
26-
if (0 === $userCount) {
25+
if ($this->userRepository->noUsers()) {
2726
return $this->redirectToRoute('dashboard_register');
2827
}
2928

@@ -38,12 +37,13 @@ public function login(AuthenticationUtils $authenticationUtils): Response
3837
}
3938

4039
#[Route('/register', name: 'dashboard_register')]
41-
public function register(Request $request): Response
40+
public function register(Request $request, Security $security): Response
4241
{
4342
$registrationEnabled = $this->getParameter('dirigent.security.registration_enabled');
44-
$userCount = $this->userRepository->count([]);
43+
$noUsers = $this->userRepository->noUsers();
4544

46-
if (!$registrationEnabled && 0 !== $userCount) {
45+
// Redirect to the homepage page if registration is disabled, but continue if there are no users yet
46+
if (!$registrationEnabled && !$noUsers) {
4747
return $this->redirectToRoute('dashboard');
4848
}
4949

@@ -54,13 +54,14 @@ public function register(Request $request): Response
5454
$form->handleRequest($request);
5555

5656
if ($form->isSubmitted() && $form->isValid()) {
57-
if (0 === $userCount) {
57+
// The first user gets owner privileges
58+
if ($noUsers) {
5859
$user->setRoles(['ROLE_SUPER_ADMIN', 'ROLE_USER']);
5960
}
6061

6162
$this->userRepository->save($user, true);
6263

63-
return $this->redirectToRoute('dashboard_login');
64+
return $security->login($user, 'security.authenticator.form_login.main', 'main');
6465
}
6566

6667
return $this->render('dashboard/security/register.html.twig', [

src/Doctrine/Repository/UserRepository.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ public function __construct(ManagerRegistry $registry)
2525
parent::__construct($registry, User::class);
2626
}
2727

28+
/**
29+
* Checks if at least one user exists in the database. Used to allow registration for the first user.
30+
*/
31+
public function noUsers(): bool
32+
{
33+
return null === $this->findOneBy([]);
34+
}
35+
2836
public function save(User $entity, bool $flush = false): void
2937
{
3038
$this->getEntityManager()->persist($entity);

0 commit comments

Comments
 (0)