From 91ef77ff4063873fead0984483eb82b9a3f507c7 Mon Sep 17 00:00:00 2001 From: Daniel Subiabre Date: Fri, 27 Mar 2026 12:29:39 +0100 Subject: [PATCH] feat: make login page identify users by email or handle --- config/packages/security.yaml | 5 +++ src/Security/LoginUserProvider.php | 55 ++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/Security/LoginUserProvider.php diff --git a/config/packages/security.yaml b/config/packages/security.yaml index ce8c57e..5f4721c 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -14,16 +14,21 @@ security: entity: class: App\Entity\User\User property: handle + login_user_provider: + id: App\Security\LoginUserProvider firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false api: + provider: app_user_provider pattern: ^/v4 security: true stateless: true + # https://github.com/thephpleague/oauth2-server-bundle/blob/master/docs/basic-setup.md#configuring-the-security-layer oauth2: true main: + provider: login_user_provider form_login: login_path: app_login check_path: app_login diff --git a/src/Security/LoginUserProvider.php b/src/Security/LoginUserProvider.php new file mode 100644 index 0000000..06a192c --- /dev/null +++ b/src/Security/LoginUserProvider.php @@ -0,0 +1,55 @@ +userRepository->findOneByIdentifier($identifier); + + if (!$user) { + throw new UserNotFoundException(\sprintf('User "%s" not found.', $identifier)); + } + + return $user; + } + + public function refreshUser(UserInterface $user): UserInterface + { + return $this->entityUserProvider->refreshUser($user); + } + + public function supportsClass(string $class): bool + { + return $class === User::class || is_subclass_of($class, User::class); + } + + public function upgradePassword(PasswordAuthenticatedUserInterface $user, string $newHashedPassword): void + { + $this->entityUserProvider->upgradePassword($user, $newHashedPassword); + } +}