Symfony2 获取当前用户

问题描述 投票:0回答:1

我正在开发一个api,当我尝试BasicAuth时我无法获取当前用户:

FatalErrorException: Error: Call to a member function getUser() on a non-object

在下面您将找到导致错误的 security.yml 部分(我认为确实如此):

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        pattern:        ^/
        anonymous:      true
        stateless:      true
        http_basic:
            realm:  "REST Service Realm"
            provider:   fos_userbundle

access_control:
    - { path: ^/users/me,       role: IS_AUTHENTICATED_FULLY }

我只是将路径放入我正在测试的 access_control 中。我还有好几个。

我正在使用 FOSRestBundle 以及 FOSUserBundle (如您所见),我不想添加前缀,因为它是多余的 :

// Routing.yml
rest : 
  type : rest 
  resource : "routing_rest.yml"

现在发生错误的部分是在 UserController 中(扩展 FOSUser 部分):

private function response($data, $status, $groups = array())
{
    $currentUser = $this->container->get('security.context')->getToken()->getUser();
    if (!$currentUser)
        $groups = array("anon");
    else
    {
        if ($currentUser->hasRole("ROLE_SUPER_ADMIN"))
             array_push($groups, "admin");
        else if ($currentUser->hasRole("ROLE_ADMIN"))
             array_push($groups, "admin");
        else if ($currentUser->hasRole("ROLE_USER"))
             array_push($groups, "user");
    }
    return $this->view($data, $status)->setSerializationContext(SerializationContext::create()->setGroups($groups));
}

知道出了什么问题吗?

php symfony fosuserbundle fosrestbundle
1个回答
2
投票

问题是您的令牌为空。 如果您的令牌不存在,则您的用户未知。

$token = $this->container->get('security.context')->getToken();
if (!$token) {
    return ('anon.');
} 
$user = $token->getUser();
© www.soinside.com 2019 - 2024. All rights reserved.