当我在控制器中执行此操作时:
$token = $this->get('security.context')->getToken();
如果控制器位于不受保护的URL下,则令牌为空:
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_ADMIN }
- { path: ^/public, roles: IS_AUTHENTICATED_ANONYMOUSLY }
在我的情况下,在/public
上调用控制器操作。如果代码在/
受保护的页面下运行,则该令牌存在。
我想要这个的原因是因为我希望在用户登录时包含其他信息,并且我想检查是否存在此“令牌”。
有没有更好的方法来检查用户是否已登录 - 在受保护和未受保护的区域都有效?
答案 0 :(得分:5)
您可以通过检查用户是否经过完全身份验证来检查用户是否经过身份验证,也就是说,他们对isGranted
函数不具有匿名性。
use Symfony\Component\Security\Core\Exception\AccessDeniedException
public function editAction()
{
if (false === $this->get('security.context')->isGranted(
'IS_AUTHENTICATED_FULLY'
)) {
throw new AccessDeniedException();
}
// ...
}
有关详细信息,请参阅here。