我试图测试具有错误权限的用户在浏览路径中包含csrf令牌的页面时看到正确的响应。
我已经使用' security.csrf.token_manager'添加了一个Behat上下文步骤来创建csrf令牌,然后在路径中使用此令牌访问该页面,我得到一个&# 34;会话开始后无法设置会话ID" 500错误。
有人可以告诉我我做错了什么,或者我如何解决这个问题,好吗?
/**
* @When /^I go to the application admin archive page for "(?P<status>[^"]*)" application (?P<number>\d+) with a valid token$/
*
* @param string $status
* @param int $number
*/
public function iGoToTheApplicationAdminArchivePageForApplicationWithAValidToken($status, $number)
{
$tokenManager = $this->kernel->getContainer()->get('security.csrf.token_manager');
$token = $tokenManager->getToken(ApplicationAdminController::CSRF_ARCHIVE);
var_dump($token);
$this->visitAdminPage('archive', $status, $number, ['token' => $token]);
}
答案 0 :(得分:0)
您获得的具体错误消息似乎是bug in symfony2的结果。尝试应用maryo关于扩展MockFileSessionStorage类的建议,并在尝试设置它之前检查id是否为空:
public function setId($id)
{
if ($this->id !== $id) {
parent::setId($id);
}
}
然后,您可以在创建客户端后执行类似的操作,在功能测试中使用此固定类:
$client->getContainer()->set('session', new Session(new FixedMockFileSessionStorageHelper()));
答案 1 :(得分:0)
此刻我仍然遇到此错误。我通过检查
的env文件配置修复了这个问题framework:
test: ~
session:
storage_id: session.storage.mock_file
profiler:
collect: false
我在框架部分
下找到了此配置framework:
session:
storage_id: session.storage.mock_file
profiler:
collect: false
所有您需要做的只是删除此行测试:〜 如下:
php bin/console cache:clear --env=test --no-debug
然后通过
清除缓存base64File
刷新并享受;)