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