Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么不应该';t我们检查用户对象以检查用户是否在Symfony2中联机_Php_Symfony - Fatal编程技术网

Php 为什么不应该';t我们检查用户对象以检查用户是否在Symfony2中联机

Php 为什么不应该';t我们检查用户对象以检查用户是否在Symfony2中联机,php,symfony,Php,Symfony,报告告诉我们: // 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

报告告诉我们:

// 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.
转换而来)。

我认为这是由RememberMe令牌造成的

Symfony文件说明:

仅因“记住我cookie”而登录的用户将 已被认证但不会被记住 是完全认证的


$this->getUser()
不会做出这种区分,因此建议使用
授权\u检查器
。出于这个原因,我的假设是,提出此建议只是为了避免开发人员不知道这一事实可能会遇到的潜在问题。

可能是因为始终存在用户对象?“anon.”已通过身份验证,但具有匿名令牌,因此他未通过完全身份验证。这只是一个想法…是的,但是在没有任何人登录的情况下调用它总是返回空值,所以使用它而不是安全授权检查器有什么问题?听起来是原因!很好,但是$this->getUser()返回当前用户,包括记忆中的用户和完全认证的用户。@georgeirimicuc:Yep,在大多数情况下,它应该相当于使用
授权\u checker
方法。然而,在某些情况下,情况可能并非如此,因此文档首先会试图让人们避免这种情况,特别是称之为不好的做法。我想这并不是真正的不好的做法,只是取决于您正在构建的应用程序的类型。真正的优势是保护应用程序的某些部分,如计费,帐户设置等。如果用户被记住但未完全验证,您可以要求我验证他的密码,以确保请求访问的是合法的帐户所有者。亚马逊做到这一点,你们可以作为记忆中的用户将物品添加到购物车或愿望列表中,但不能结帐或查阅订单历史记录