Пример официального аутентификатора Symfony JSON - PullRequest
0 голосов
/ 04 января 2019

Есть ли официальный пример аутентификатора JSON? На сайте гида я нахожу только для входа в форму, LoginFormAuthenticator , но здесь Я не нахожу никакого примера.

Моя проблема в том, что я не хочу тормозить встроенный аутентификатор json в symfony, но мне пришлось сохранить время последнего входа пользователя в систему.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Обновлено после комментариев

Если вам нужно сохранить время последнего входа в систему, вы можете сделать это, используя SecurityEvents

<?php

namespace App\EventSubscriber;

use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Http\SecurityEvents;

class LoginEventSubscriber implements EventSubscriberInterface
{
    protected $em;

    public function __construct(EntityManagerInterface $em)
    {
        $this->em  = $em;
    }

    public static function getSubscribedEvents()
    {
        return [
            // Subscribe to login event - fire 'storeLastLogin' method
            SecurityEvents::INTERACTIVE_LOGIN => 'storeLastLogin'
        ];
    }

    public function storeLastLogin(InteractiveLoginEvent $event)
    {
        // Retrieve the User entity from token
        $user = $event->getAuthenticationToken()->getUser();

        // It means that you have a 'lastLogin' property in your User entity
        $user->setLastLogin(new \DateTime());
        $this->em->persist($user);
        $this->em->flush();
    }
}

Логика хранения в методе storeLastLogin приведена в качестве примера с использованием Doctrine. Но вы можете реализовать это так, как вам нужно.

0 голосов
/ 04 января 2019

Я думаю Специальная система аутентификации с защитой - это то, что вам нужно.Вам нужно будет адаптировать специфичные для токена API части к вашему варианту использования (и взглянуть также на аутентификатор формы).

Re: время последнего входа пользователя в систему, это то, что должно быть определено вваш класс User и извлекается из базы данных (или файла пользователя) вместе с именем пользователя, ролями и т. д. Вы должны написать метод User::getLastLoginTime(), а затем в своем аутентификаторе вы можете вызвать $user->getLastLoginTime(), если вам нужно,(Мне любопытно, почему вашему аутентификатору нужно знать время последнего входа в систему.)

Редактировать: Я думаю, что, возможно, неправильно понял ваш вопрос после прочтения информативного ответа Романа Литвинова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...