РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
617 of 1361 menu

Метод refreshUser

Метод refreshUser принадлежит классу UserProvider и вызывается Symfony после успешной аутентификации пользователя. Он принимает объект пользователя, который был получен из сессии или токена, и возвращает его актуальную версию из хранилища (например, из базы данных). Это позволяет обновить данные пользователя (роли, статус, пароль) без повторного входа в систему.

Если пользователь не найден, метод должен выбросить исключение UnsupportedUserException. Если переданный класс пользователя не поддерживается, также выбрасывается это исключение.

Синтаксис

public function refreshUser(UserInterface $user): UserInterface

Пример

Давайте создадим класс UserProvider, который реализует интерфейс UserProviderInterface и обновляет пользователя из базы данных:

<?php namespace AppSecurity; use AppEntityUser; use AppRepositoryUserRepository; use SymfonyComponentSecurityCoreExceptionUnsupportedUserException; use SymfonyComponentSecurityCoreExceptionUserNotFoundException; use SymfonyComponentSecurityCoreUserUserInterface; use SymfonyComponentSecurityCoreUserUserProviderInterface; class UserProvider implements UserProviderInterface { public function __construct( private UserRepository $userRepository ) { } public function loadUserByIdentifier(string $identifier): UserInterface { $user = $this->userRepository->findOneBy(['email' => $identifier]); if (!$user) { throw new UserNotFoundException('User not found'); } return $user; } public function refreshUser(UserInterface $user): UserInterface { if (!$user instanceof User) { throw new UnsupportedUserException( sprintf('Instances of "%s" are not supported.', get_class($user)) ); } $refreshedUser = $this->userRepository->find($user->getId()); if (!$refreshedUser) { throw new UserNotFoundException('User not found'); } return $refreshedUser; } public function supportsClass(string $class): bool { return $class === User::class || is_subclass_of($class, User::class); } } ?>

Пример

Давайте вызовем метод refreshUser вручную в контроллере и выведем обновлённые данные пользователя:

<?php namespace AppController; use AppSecurityUserProvider; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; use SymfonyComponentSecurityCoreSecurity; class UserController extends AbstractController { #[Route('/user/refresh', name: 'user_refresh')] public function refresh(Security $security, UserProvider $userProvider): Response { $user = $security->getUser(); $refreshedUser = $userProvider->refreshUser($user); return new Response('User email: ' . $refreshedUser->getEmail()); } } ?>

Результат выполнения кода:

"User email: user@example.com"

Смотрите также

  • класс UserProvider,
    который управляет загрузкой и обновлением пользователей
  • метод loadUserByIdentifier,
    который загружает пользователя по идентификатору
  • метод supportsClass,
    который проверяет поддержку класса пользователя
  • класс UserBadge,
    который связывает пользователя с паспортом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить