2014-10-16 4 views
1

얻기, 나는이 BasicAuth를하려고 할 때 현재 사용자를 얻을 수 없다 : 당신이 아래Symfony2 내가 API를 개발하고 있어요 현재 사용자

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에 경로를 넣는다. 나는 테스트 중이다. 몇 가지 더있어. 이제

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

오류가 발생하는 부분 : 나는 (당신이 볼 수있는)가 중복 때문에 나는, 접두어를 넣어 싶지 않았다 FOSRestBundle뿐만 아니라 FOSUserBundle을 사용하고

(FOSUser를 확장 한) UserController에 있습니다 :

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

+0

죄송합니다, 업데이트했습니다. – Romain

+1

이 컨트롤러 내에서 직접'$ this-> getUser();'를 호출하십시오. [doc] (http://symfony.com/doc/current/book/security.html#retrieving-the-user-object) – chrisben

답변

2

토큰이 null 인 것이 문제입니다. 토큰이없는 경우 알 수없는 사용자가 있습니다.

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

이전 코멘트에서 언급했듯이, 나는 chrisben 솔루션을 사용했습니다. 나는 너의 작품이 너무 효과가 있다고 생각하지만 조금 더 길다. 그리고 토큰과 사용자에 대해 두 번 확인해야합니다. 하지만 어쨌든 많이 감사합니다 =) – Romain

관련 문제