UsernamePasswordToken在一个请求后为NULL

时间:2017-04-24 05:28:33

标签: symfony authentication oauth phpunit symfony-3.2

我使用REST和OAuthBundle为我的Symfony应用程序创建了UnitTests。要测试防火墙后面的API,我使用setUp方法创建了UsernamePasswordToken

$token = new UsernamePasswordToken($user, null, 'default', array('ROLE_USER'));

现在我通过

设置令牌
self::$client->getContainer()->get('security.token_storage')->setToken($token);

有趣的是,此令牌仅适用于存储中的一个请求。第一个断言的第一个请求成功,第二个请求因401错误而失败。我之后检查了存储,getToken()方法返回NULL。如果我在下一个请求之前再次设置令牌,则此请求也会成功。

这是一个示例请求和断言:

$crawler = self::$client->request('GET', '/api/users');
$this->assertEquals(200, self::$client->getResponse()->getStatusCode());

所以,我可以在每个请求之前设置令牌来解决问题,但这在我的所有测试中都会非常烦人。为什么令牌之后是#34;使用"走了,我怎么能设定一个" life"或其他什么?

1 个答案:

答案 0 :(得分:0)

我认为问题在于每个请求内核及其容器都会从缓存中再次加载,而不包含您的令牌。您必须在会话中保留令牌才能永久保留。文档Testing HTTP Authentication

中描述了如何执行此操作
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="tab" data-type="wx" data-desc="整合"> 
  <span data-type="wx" class="on">整合</span>
  <span data-type="sx">第一球</span>
  <span data-type="qsm">第二球</span>
  <span data-type="zsm">第三球</span>
  <span data-type="hsm">第四球</span>
  <span data-type="em">第五球</span> 
</div>

这应该适用于多个请求,如果您仍希望某些测试不能登录,则可以按照test-method进行设置。