Symfony 2功能测试:验证自己User类的用户

Dmi*_*try 4 php security testing phpunit symfony

如回答如何在Symfony2功能测试中使用经过身份验证的用户中所述?有一个简单的解决方案Symfony\Component\Security\Core\User\User.

但我有不同的User类(一些必要的附加字段),我想用它来验证用户.

我该如何为它设置提供者?

ihs*_*san 10

这是一个棘手的问题:https://github.com/symfony/symfony/issues/5228 虽然它是2.1,但我仍然使用2.2.

以下是我如何进行测试认证:

// Create a new client to browse the application
$client = static::createClient();
$client->getCookieJar()->set(new Cookie(session_name(), true));

// dummy call to bypass the hasPreviousSession check
$crawler = $client->request('GET', '/');

$em = $client->getContainer()->get('doctrine')->getEntityManager();
$user = $em->getRepository('MyOwnBundle:User')->findOneByUsername('username');

$token = new UsernamePasswordToken($user, $user->getPassword(), 'main_firewall', $user->getRoles());
self::$kernel->getContainer()->get('security.context')->setToken($token);

$session = $client->getContainer()->get('session');
$session->set('_security_' . 'main_firewall', serialize($token));
$session->save();

$crawler = $client->request('GET', '/login/required/page/');

$this->assertTrue(200 === $client->getResponse()->getStatusCode());

// perform tests in the /login/required/page here..
Run Code Online (Sandbox Code Playgroud)

哦,和使用声明:

use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Bundle\FrameworkBundle\Client;
use Symfony\Component\BrowserKit\Cookie;
Run Code Online (Sandbox Code Playgroud)

  • 真棒.只是提醒一下,在Symfony 3.0.6中,security.context应该是security.token_storage;) (2认同)