0

为了防止 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
}

之前可以生成令牌吗?

4

0 回答 0