Php 尝试访问用户时,令牌为空
我对Symfony 3中的令牌有一个奇怪的问题 我将Php 尝试访问用户时,令牌为空,php,symfony,symfony-3.3,Php,Symfony,Symfony 3.3,我对Symfony 3中的令牌有一个奇怪的问题 我将security.token\u存储注入到我的一个分支扩展中 app.twig_extension: class: AppBundle\Twig\Extension\TwigExtension arguments: ['@security.token_storage'] tags: - { name: twig.extension } 现在,在构造函数中,我想从令牌中获取用户 public fu
security.token\u存储
注入到我的一个分支扩展中
app.twig_extension:
class: AppBundle\Twig\Extension\TwigExtension
arguments: ['@security.token_storage']
tags:
- { name: twig.extension }
现在,在构造函数中,我想从令牌中获取用户
public function __construct(TokenStorage $tokenStorage)
{
/** @var User user */
$token = $tokenStorage->getToken();
//$user = $token->getUser();
//dump($user);
//$this->user = $tokenStorage->getToken()->getUser();
}
问题就在这里。如果我转储$token
,一切看起来都正常。以下是令牌的转储:
PostAuthenticationGuardToken {#637 ▼
-providerKey: "main"
-user: User {#396 ▶}
-roles: array:1 [▶]
-authenticated: true
-attributes: []
}
但是如果我使用的是$token->getUser()
我将在null上收到我正在调用的getUser
错误
(1/1)fatalthrowable错误
在null上调用成员函数getUser()
此错误将显示在Symfony探查器中。现在,如果我要删除部件$token->getUser()代码>从我的代码,然后重新加载探查器,将显示用户
我也无法解释为什么会抛出关于null变量的错误。谁能给我解释一下吗
我已经尝试将整个容器注入服务器,并尝试通过容器获取用户,但结果是相同的。尝试使用此方法获取用户
$user = $this->container->get('security.token_storage')->getToken()->getUser();
您在探查器上看到该错误的原因是探查器URL不在防火墙后面,因此getToken()没有身份验证信息且为null
PHPdoc forgetToken
函数
/**
* Returns the current security token.
*
* @return TokenInterface|null A TokenInterface instance or null if no authentication information is available
*/
public function getToken();
在调用getToken()
之前,请确保检查身份验证信息是否可用。我无法解决问题本身,但我找到了一个解决方法
我没有将TokenStorage注入扩展,而是将用户作为我想要使用的函数的参数
这就是我在我的小树枝模板中所做的调用
{{ showUnreadMessages(app.user) }}
my TwigExtension包含以下函数:
public function getFunctions()
{
return [
new \Twig_SimpleFunction('showUnreadMessages', [$this, 'showUnreadMessages'])
];
}
public function showUnreadMessages(User $user)
{
return $this->dbHandler->getCountUnreadMessages($user);
}
我在服役,没有集装箱。无论如何,不建议注入容器。您发布的代码与我的代码相同,唯一的区别是您正在检查容器,并且您必须拥有容器对不起,我想你还没有真正理解我问的问题。变量$token
是类PostAuthenticationGuardToken的对象,这就是为什么PostAuthenticationGuardToken显示在我在问题中发布的变量$token
的转储中。我只想在有登录用户时接收用户。除了登录、注销外,所有内容都设置在防火墙后面。这不仅是一个探查器错误,还包括其他所有错误,例如,由于此错误,资产呈现失败。