2014-10-16 92 views
1

我開發一個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)); 
} 

任何想法有什麼不對?

+0

euhm,哪裏是產生錯誤的線?很高興看到實際的原因... – NDM 2014-10-16 15:30:37

+0

對不起,我更新了它。 – Romain 2014-10-16 16:37:06

+1

直接在此控制器中調用'$ this-> getUser();'請參閱[doc](http://symfony.com/doc/current/book/security.html#retrieving-the-user-object) – chrisben 2014-10-16 20:27:11

回答

2

問題是您的令牌爲空。如果您的令牌不存在,則您擁有未知用戶。

$token = $this->container->get('security.context')->getToken(); 
if (!$token) { 
    return ('anon.'); 
} 
$user = $token->getUser(); 
+0

正如我在之前的評論中所說的,我使用了chrisben解決方案。 我認爲你的作品也是如此,但時間更長。我必須檢查兩次(對於令牌和用戶)。 但是非常感謝=) – Romain 2014-10-17 07:35:30