2017-08-16 2 views
0
Good morning. 

TLDR: Ich denke, ich brauche für Symfony Test Client etwas ähnlich xhr Einstellungen js: withcredentals: true.symfony Test - authentifizierte funktioniert nicht auf neue Anfrage

Symfony 3.1. I have action in rest api controller: 

    /** 
    * @Rest\GET("/get-stuff") 
    * @Rest\View 
    * @Security("is_granted('IS_AUTHENTICATED_FULLY')") 
    */ 
    public function GetStuffAction($userId) 
    { 
     // get userId from session 
     $userId = $this->getUser()->getId(); 
     $em = $this->getDoctrine()->getManager(); 
     $Stuff = $em->getRepository('MyApiBundle:Stuff')->findBy(['user' => $userId]); 
     return $this->viewGroup($Stuff, ['stuff']); 
    }  

Und es funktioniert richtig.

Jetzt möchte ich-Test, so habe ich:

class TestCase extends WebTestCase 
    { 
     public function testIndex() 
     { 
      $this->client = self::createClient(); 
      $this->storage = new MockFileSessionStorage(__dir__.'/../../../../app/cache/test/sessions'); 
      $this->session = new Session($this->storage); 
      $this->logIn($this->getUser(), new Response()); 
      $this->client->request('GET', '/get-stuff'); 
      $content = $this->client->getResponse()->getContent(); 
      $this->assertEquals({"message":"Full authentication is required to access this resource.","code":0},$content); 
    } 

     public function logIn(User $user, Response $response) 
     { 
      $this->session->start(); 
      $this->cookie = new Cookie('MOCKSESSID', $this->storage->getId()); 
      $this->cookieJar = new CookieJar(); 
      $this->cookieJar->set($this->cookie); 
      $this->token = new UsernamePasswordToken($user, 'user', 'main', $user->getRoles()); 
      $this->session->set('_security_main', serialize($this->token)); 


      $this->getSecurityManager()->loginUser(
       $this->container->getParameter('fos_user.firewall_name'), 
       $user, 
       $response 
      ); 

      $this->session->save(); 
     } 
    } 

Und Test für sie gibt mir Nachricht: "Full-Authentifizierung erforderlich ist, diese Ressource zuzugreifen". Nach der Methode logIn() kann ich Sitzungsdaten lesen, die mit dem angemeldeten Benutzer verbunden sind. Wie kann ich während dieses Teils angemeldet sein, nicht Nachricht zur Authentifizierung bekommen ?:

$this->client->request('GET', '/get-stuff'); 
     $content = $this->client->getResponse()->getContent(); 

Weitere Details: 1. Mein Test-Klasse erweitert WebTestCase. 2. Mein Benutzer wird für FosUserBundle überschrieben.

Ich nehme an, das ist so etwas wie in javascript: var xhr = new XMLHttpRequest(); xhr.withCredentials = wahr; aber ich weiß nicht was.

Vielen Dank im Voraus für die Lösung meines Problems!

Antwort

0

Ok, ich war guter Weg, dies zu tun:

public function logIn (Benutzer $ user) { $ session = $ this-> Sitzung;

$firewallContext = 'secured_area'; 

    $token = new UsernamePasswordToken($user, 'user', 'main', $user->getRoles()); 
    $session->set('_security_'.$firewallContext, serialize($token)); 
    $session->save(); 

    $cookie = new Cookie($session->getName(), $session->getId()); 
    $this->client->getCookieJar()->set($cookie); 
} 
Verwandte Themen