Как включить токен CSRF в маршрут get в тестах Laravel?

Чтобы предотвратить атаки CSRF, я добавляю параметр состояния с моим текущим токеном CSRF во внешнюю ссылку. Когда внешняя страница перенаправляет пользователя обратно на мой сайт, она будет содержать состояние.

С простым условием я могу проверить это в моем контроллере:

if($data['state'] !== csrf_token()){
    throw new TokenMismatchException;
}

Теперь я хочу написать тест для прохождения условия if, но csrf_token() пуст в каталоге test, но не в контроллере. Так что это не удается, к сожалению. Вот выдержка из теста:

/** @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
}

Можно ли сгенерировать токен раньше?

1 ответ

Если вы написали код тестирования доступа HTTP до использования crsf_token(), как показано в примере ниже.

Токен csrf, кажется, создается в этом тестовом сеансе.

      $this->get(...)

$this->get(route('connect.index', [
    'scope' => $this->scope,
    'code' => $this->code,
    'state' => csrf_token(), //it's null here...
  ]))->assertStatus(200);
Другие вопросы по тегам