Метод login класса Security
Метод login класса Security выполняет
программную аутентификацию пользователя в приложении
Symfony. Первым параметром передаётся объект
пользователя, вторым - имя файрвола, третьим -
массив ролей. После вызова пользователь считается
вошедшим в систему, а его токен сохраняется в
хранилище TokenStorage.
Метод удобен, когда нужно войти в систему без формы логина: например, после регистрации, при входе через API или в тестах. Если файрвол не указан, берётся файрвол по умолчанию. Роли можно не передавать - тогда будут использованы роли пользователя.
Синтаксис
public function login(UserInterface $user, string $firewallName = 'main', array $roles = []): void
Пример
Давайте выполним вход пользователя в контроллере после его регистрации:
<?php
namespace AppController;
use AppEntityUser;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentSecurityCoreSecurity;
class ArticleController extends AbstractController
{
#[Route('/user/register', name: 'user_register')]
public function register(EntityManagerInterface $em, Security $security): Response
{
$user = new User();
$user->setEmail('user@example.com');
$em->persist($user);
$em->flush();
$security->login($user, 'main', ['ROLE_USER']);
return new Response('user logged in');
}
}
?>
Результат выполнения кода:
"user logged in"
Пример
Давайте проверим, что после вызова login
пользователь действительно аутентифицирован:
<?php
namespace AppController;
use AppEntityUser;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentSecurityCoreSecurity;
class ArticleController extends AbstractController
{
#[Route('/user/login', name: 'user_login')]
public function login(Security $security): Response
{
$user = new User();
$user->setEmail('user@example.com');
$security->login($user);
$current = $security->getUser();
return new Response($current->getUserIdentifier());
}
}
?>
Результат выполнения кода:
"user@example.com"