Я хотел бы добавить userId
и username
, предоставленный FOSUserBundle
, в мой регистратор (монолог). Я следовал this tutorial, чтобы иметь возможность регистрировать IP-адрес, он работает.Symfony/Monolog: Пользовательский процессор с данными FOSUserBundle
Мой код ниже перерывов, потому что $this->tokenStorage->getToken()
является NULL
, даже если я вошел в систему.
services.yml
monolog.processor.user:
class: AppBundle\Log\UserProcessor
arguments: [ "@request_stack", "@security.token_storage" ]
tags:
- { name: monolog.processor }
AppBundle/Журнал/UserProcessor.php
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use AppBundle\Entity\User;
class UserProcessor
{
private $requestStack;
private $tokenStorage;
public function __construct(RequestStack $requestStack, TokenStorageInterface $tokenStorage)
{
$this->requestStack = $requestStack;
$this->tokenStorage = $tokenStorage;
}
public function __invoke(array $record)
{
$username = '';
$userId = 0;
$user = $this->tokenStorage->getToken()->getUser();
// !!! ERROR !!!
// $this->tokenStorage->getToken() is NULL
if ($user instanceof User) {
$username = $user->getUsername();
$userId = $user->getId();
}
$record['extra']['user_id'] = $userId;
$record['extra']['username'] = $username;
return $record;
}
}
Любые идеи? Спасибо заранее!
Я бы сказал, что проблема, вероятно, в том, что процессор вызывается для регистрации чего-либо, прежде чем безопасность сможет действовать и получить текущего пользователя. Существует очень мало, что вы можете сделать, если это так, просто проверьте, существует ли токен, и если он не регистрирует пользователя –
@CarlosGranados Похоже, вы правы. Имеет смысл! Я успешно протестировал процессор с помощью настраиваемого обработчика/канала, который я вызывал в контроллерах (где безопасность доступна). Просто отправьте свой комментарий в качестве ответа, и я приму его. Благодаря! –