Класс UserProvider
Класс UserProvider - это интерфейс из секции
passport, который реализует загрузку
пользователя по идентификатору и обновление
его данных. Используется аутентификатором
для получения объекта пользователя во время
входа в систему. Основные методы:
loadUserByIdentifier,
refreshUser и
supportsClass.
Синтаксис
<?php
namespace Symfony\Component\Security\Core\User;
interface UserProviderInterface
{
public function loadUserByIdentifier(string $identifier): UserInterface;
public function refreshUser(UserInterface $user): UserInterface;
public function supportsClass(string $class): bool;
}
?>
Пример
Давайте создадим простой провайдер пользователей,
который возвращает объект User по
идентификатору 'abcde':
<?php
namespace App\Security;
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
class UserProvider implements UserProviderInterface
{
public function loadUserByIdentifier(string $identifier): UserInterface
{
if ($identifier !== 'abcde') {
throw new UserNotFoundException('User not found');
}
return new User($identifier);
}
public function refreshUser(UserInterface $user): UserInterface
{
return $user;
}
public function supportsClass(string $class): bool
{
return User::class === $class;
}
}
?>
Результат выполнения метода
loadUserByIdentifier для
'abcde':
App\Security\User {#1
identifier: "abcde"
}
Пример
Давайте используем провайдер внутри аутентификатора для загрузки пользователя:
<?php
namespace App\Security;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
class FormAuthenticator
{
public function __construct(
private UserProviderInterface $userProvider
) {
}
public function authenticate(Request $request): Passport
{
$identifier = $request->request->get('username', '');
$user = $this->userProvider->loadUserByIdentifier($identifier);
return new Passport(
new UserBadge($user->getUserIdentifier()),
$user
);
}
}
?>
Результат выполнения кода для запроса с
'username' = 'abcde':
"user authenticated"
Смотрите также
-
метод
loadUserByIdentifier,
который загружает пользователя по идентификатору -
метод
refreshUser,
который обновляет данные пользователя -
метод
supportsClass,
который проверяет поддержку класса пользователя -
класс
UserBadge,
который хранит идентификатор пользователя