为了防止 CSRF 攻击,我将带有当前 CSRF 令牌的状态参数添加到外部链接。当外部页面将用户重定向回我的站点时,它将包含状态。
通过一个简单的条件,我可以在我的控制器中检查它:
if($data['state'] !== csrf_token()){
throw new TokenMismatchException;
}
现在我想为其编写一个测试以通过 if 条件,但 csrf_token() 在测试目录中为空,但在控制器中却没有。不幸的是,它失败了。以下是测试的摘录:
/** @test */
public function it_saves_the_data_in_database()
{
$this->get(route('connect.index', [
'scope' => $this->scope,
'code' => $this->code,
'state' => csrf_token(), //it's null here...
]))->assertStatus(200); //however it returns 419
}
之前可以生成令牌吗?