2

当我在控制器中执行此操作时:

$token = $this->get('security.context')->getToken();

如果控制器位于不受保护的 URL 下,则令牌为 null:

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_ADMIN }
    - { path: ^/public, roles: IS_AUTHENTICATED_ANONYMOUSLY }

在我的例子中,控制器动作是在/public. 如果代码在/受保护的页面下运行,则令牌存在。

我想要这个的原因是因为我想在用户登录的情况下包含其他信息,并且我想检查这个“令牌”是否存在。

有没有更好的方法来检查用户是否已经登录——在受保护和不受保护的区域都可以使用?

4

1 回答 1

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();
    }
    // ...
}

请参阅此处了解更多信息。

于 2012-11-19T17:38:49.800 回答