Как включить токен 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);