Symfony/Monolog:带有 FOSUserBundle 数据的自定义处理器
Symfony/Monolog: Custom processor with FOSUserBundle data
我想将 FOSUserBundle
提供的 userId
和 username
添加到我的 Logger (Monolog)。我按照 this tutorial 来记录 IP,它正在工作。
我下面的代码中断了,因为 $this->tokenStorage->getToken()
是 NULL
,即使我已登录也是如此。
services.yml
monolog.processor.user:
class: AppBundle\Log\UserProcessor
arguments: [ "@request_stack", "@security.token_storage" ]
tags:
- { name: monolog.processor }
AppBundle/Log/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;
}
}
有什么想法吗?
提前致谢!
问题在于,在安全措施能够采取行动并获取当前用户之前调用处理器来记录某些内容。只需检查令牌是否存在,如果不存在则不登录用户
我想将 FOSUserBundle
提供的 userId
和 username
添加到我的 Logger (Monolog)。我按照 this tutorial 来记录 IP,它正在工作。
我下面的代码中断了,因为 $this->tokenStorage->getToken()
是 NULL
,即使我已登录也是如此。
services.yml
monolog.processor.user:
class: AppBundle\Log\UserProcessor
arguments: [ "@request_stack", "@security.token_storage" ]
tags:
- { name: monolog.processor }
AppBundle/Log/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;
}
}
有什么想法吗? 提前致谢!
问题在于,在安全措施能够采取行动并获取当前用户之前调用处理器来记录某些内容。只需检查令牌是否存在,如果不存在则不登录用户