Supertest запрос с CSRF не удается
У меня есть приложение Express 4, которое делает пользователя csurf для защиты CSRF на маршрутах API. Приложение работает отлично, и защита CSRF действительно работает там, где запросы без csrf-token
заголовок выдаст соответствующую ошибку.
Я использую Ava для тестирования с supertest для тестирования маршрутов. Следующий тест завершается неудачно, когда включена проверка CSRF, но проходит, если я удаляю промежуточное ПО:
test('booking api no auth', async t => {
t.plan(4)
const server = await request(makeServer(t.context.config, t.context.connection))
const csrf = await server
.get('/')
.then(res => new JSDOM(res.text))
.then(dom => dom.window.document.querySelector('meta[name="csrf_token"]'))
.then(csrfMeta => csrfMeta.getAttribute('content'))
const GET = await server
.get('/v2/Booking')
.set('csrf-token', csrf)
const POST = await server
.post('/v2/Booking')
.set('csrf-token', csrf)
.send({
name: 'Test',
description: 'Test',
category: 'diving',
minimumPax: 1,
maximumPax: 2,
priceAdult: 1,
priceChild: 1
})
const res = { GET, POST }
t.is(res.GET.status, 403)
t.deepEqual(res.GET.body, text['403'])
t.is(res.POST.status, 201)
t.truthy(res.POST.body._id)
})
Я проверил, что заголовок действительно установлен в запросе. Любые идеи или предложения для альтернативных библиотек, которые работают, приветствуются.
1 ответ
У меня ранее также были ошибки с supertest
и вход в систему, все еще не решена, но с использованием supertest-session
кажется, исправил это для меня. Исправить было заменить:
import request from 'supertest'
с
import request from 'supertest-session'
и все волшебно работает.