我在CakePHP 3应用程序中启用CSRF令牌和SSL后,试图让我的单元测试再次运行。
如何为以下测试创建或生成令牌?或者我只是为了测试目的而禁用它?
public function testLogin() {
$this->get('/login');
$this->assertResponseOk();
$data = [
'email' => 'info@example.com',
'password' => 'secret'
];
$this->post('/login', $data);
$this->assertResponseSuccess();
$this->assertRedirect(['controller' => 'Users', 'action' => 'dashboard']);
}
答案 0 :(得分:3)
官方文件has good approach since version 3.1.2。
您只需在帖子前致电$this->enableCsrfToken();
和/或$this->enableSecurityToken();
,以便能够使用令牌成功执行请求。
正如官方示例所示:
public function testAdd()
{
$this->enableCsrfToken();
$this->enableSecurityToken();
$this->post('/posts/add', ['title' => 'Exciting news!']);
}
答案 1 :(得分:2)
只需通过ControllerIntergrationTestCase::cookie()
在Cookie中设置令牌,并通过POST数据传递令牌。默认情况下,要使用的Cookie名称为csrfToken
,POST数据键必须为_csrfToken
。
CSRF令牌不需要使用任何特定格式,CSRF组件只会测试字符串是否相等。
$token = 'my-csrf-token';
$this->cookie('csrfToken', $token);
$data = [
'email' => 'info@example.com',
'password' => 'secret',
'_csrfToken' => $token
];
$this->post('/login', $data);
请注意,cookie一直保留到拆解,即。当前测试中的每个子队列请求都将使用配置的cookie。