我正在开发一个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));
}
知道什么是错的吗?
答案 0 :(得分:2)
问题是您的令牌为空。如果您的令牌不存在,则您有一个未知用户。
$token = $this->container->get('security.context')->getToken();
if (!$token) {
return ('anon.');
}
$user = $token->getUser();