为什么我们不应该检查User对象以检查用户是否在Symfony2

时间:2015-09-23 12:10:26

标签: php symfony

official Symfony documentation告诉我们以下内容:

// yay! Use this to see if the user is logged in
if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
    throw $this->createAccessDeniedException();
}

// boo :(. Never check for the User object to see if they're logged in
if ($this->getUser()) {

}

到目前为止,我一直在使用$this->getUser()而没有任何问题,既检查用户是否在线并获取当前登录用户,并且发现它是错误的。但我找不到的是为什么这样做是错误的。

任何人都可以告诉或举例说明这会导致问题吗?我没有看到问题,因为它总是返回null(如文档所说,从anon.转换)如果没有人登录并且当前登录User类作为对象,可以访问它的方法。

1 个答案:

答案 0 :(得分:5)

我认为这是由记住我的令牌引起的。

Symfony文档说明了这一点:

  

仅因为&#34记录的用户,请记住我的cookie"将   有IS_AUTHENTICATED_REMEMBERED但不会   IS_AUTHENTICATED_FULLY。

$this->getUser()不会进行此区分,因此建议您使用authorization_checker。出于这个原因,我认为这个建议只是为了避免潜在的问题,而那些不了解这一事实的开发人员可能会遇到这些问题。