Symfony4 内核事件执行重定向并依赖于用户

Symfony4 kernel event performing redirects and dependant on user

我想在每次请求时检查来自用户实体的内容,如果满足某些条件,我想执行重定向。试过这个:

public static function getSubscribedEvents()
{
    return [
        KernelEvents::REQUEST => [
            ['watcher', 0],
        ]
    ];
}

public function watcher(GetResponseEvent $event)
{
    if (!$event->isMasterRequest()) return;

    /** @var Request $request */
    $request = $event->getRequest();
    echo "User: " . $request->getUser();
    exit();
}

但是 $request->getUser() returns null

关于如何在内核事件中获取用户的任何建议?

$request->getUser() 不是 return 一个已经通过安全组件认证的用户对象,而是 HTTP 基本认证的用户名部分。

例如,如果您请求 http://username:password@example.com/,那么 $request->getUser() 将包含 "username"

要获取用户对象,您必须将 security.token_storage 服务注入您的事件订阅者,然后调用 $tokenStorage->getToken()->getUser()

请注意,getToken()getUser()都可以returnnull,因此您应该先检查两者。查看 the getUser() implementation in Symfony's ControllerTrait 如何最好地做到这一点。