Symfony2中获取当前用户
问题描述:
我开发一个API,当我尝试,则基本我不能让当前的用户:Symfony2中获取当前用户
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"
现在在错误发生的部分在用户控制器(扩展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));
}
任何想法有什么不对?
答
问题是您的令牌为空。如果您的令牌不存在,则您拥有未知用户。
$token = $this->container->get('security.context')->getToken();
if (!$token) {
return ('anon.');
}
$user = $token->getUser();
+0
正如我在之前的评论中所说的,我使用了chrisben解决方案。 我认为你的作品也是如此,但时间更长。我必须检查两次(对于令牌和用户)。 但是非常感谢=) – Romain 2014-10-17 07:35:30
euhm,哪里是产生错误的线?很高兴看到实际的原因... – NDM 2014-10-16 15:30:37
对不起,我更新了它。 – Romain 2014-10-16 16:37:06
直接在此控制器中调用'$ this-> getUser();'请参阅[doc](http://symfony.com/doc/current/book/security.html#retrieving-the-user-object) – chrisben 2014-10-16 20:27:11