Symfony: Как сохранить каждый успешный вход в таблицу базы данных

я разрабатываю symfony restful api с такими инструментами, как FosRestBundle, FosUserBundle и Lexik JWT для аутентификации api.

Мне нужно сохранять каждый успешный вход в мое приложение. Итак, я создал логин (user_id, loginDate), но я не знаю, как его использовать, потому что логин обрабатывается из Lexik.

Кто-нибудь знает, как я могу это сделать?

Спасибо

вы имеете в виду просто регистрацию активности входа в систему? Потому что мне кажется, что сохранение данных входа в базу данных очень неудобно.

DevDonkey 26.09.2018 13:01

вам нужно сохранить как насчет логина пользователя?

Mohammed Yassine CHABLI 26.09.2018 13:26

Наш клиент хочет видеть статистику, например количество ежедневных входов в систему. Итак, у нас должна быть история входа в систему. Я знаю, что это бесполезная логика, но для нашего клиента это обязательная функция. Пожалуйста, не голосуйте против меня за потребности моего клиента.

billy tzez 26.09.2018 16:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
3
451
1

Ответы 1

Для этого можно использовать событие security.interactive_login. Более подробную информацию можно найти в официальной документации: https://symfony.com/doc/current/components/security/authentication.html#authentication-events

Создайте слушателя и зарегистрируйте его:

namespace App\EventListener;

use App\Component\EntityManagerAwareTrait;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Http\SecurityEvents;

/**
 * @package App\EventListener
 */
class SecuritySubscriber implements EventSubscriberInterface
{
    /**
     * @param EntityManagerInterface $em
     */
    public function __construct(EntityManagerInterface $em)
    {
        $this->em = $em;
    }

    /**
     * @return array
     */
    public static function getSubscribedEvents(): array
    {
        return [
            SecurityEvents::INTERACTIVE_LOGIN => 'onSecurityInteractiveLogin',
        ];
    }

    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event): void
    {
        $user = $event->getAuthenticationToken()->getUser();
        if ($user instanceof User) {
            $user->setLoginDate(new \DateTime());

            $this->em->persist($user);
            $this->em->flush();
        }
    }
}

Другие вопросы по теме