Symfony: как сохранить каждый успешный вход в таблицу базы данных - PullRequest
0 голосов
/ 26 сентября 2018

Я разрабатываю API для Symfony Restful с такими инструментами, как FosRestBundle, FosUserBundle и Lexik JWT для аутентификации API.

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

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

Спасибо

1 Ответ

0 голосов
/ 26 сентября 2018

Для этого можно использовать событие 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();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...