相关疑难解决方法(0)

Symfony 2.1中的功能测试中的身份验证

我目前正在将2.0.*项目迁移到Symfony的当前2.1 beta版.

在我的功能测试中,我目前使用此代码来创建具有身份验证的客户端:

$client = // create a normal test client
$role = 'ROLE_USER';
$firewallName = 'main';
$user = // pull a user from db

$client->getCookieJar()->set(new \Symfony\Component\BrowserKit\Cookie(session_name(), true));

$token = new UsernamePasswordToken($user, null, $firewallName, array($role));

self::$kernel->getContainer()->get('session')->set('_security_' . $firewallName, 
serialize($token));
Run Code Online (Sandbox Code Playgroud)

这在预期的2.0.*中有效,但在2.1中没有,数据没有在会话中设置.

有任何想法吗?

编辑(添加更多信息):

似乎问题出在方法" onKernelResponse " 中的文件" Symfony\Component\Security\Http\Firewall\ContextListener "中.有这个代码:

if ((null === $token = $this->context->getToken()) || ($token instanceof AnonymousToken)) {
    $session->remove('_security_'.$this->contextKey);
} else {
    $session->set('_security_'.$this->contextKey, serialize($token));
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下if"$ token instanceof AnonymousToken"是真的,因此会话密钥被删除.如果我注释掉那些代码,一切都按预期工作.

所以我想我的新问题是:我能做些什么来使令牌不是匿名的?

php symfony symfony-2.1

19
推荐指数
1
解决办法
5089
查看次数

标签 统计

php ×1

symfony ×1

symfony-2.1 ×1