CSRF的Supertest请求失败

时间:2017-06-29 14:23:41

标签: express csrf supertest ava

我有一个 Express 4应用程序,它使 csurf 的用户在API路由上获得CSRF保护。应用程序运行正常,并且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 个答案:

答案 0 :(得分:0)

我以前也遇到supertest错误并登录,但仍未解决,但使用supertest-session似乎已经为我解决了这个问题。修复是替换:

import request from 'supertest'

import request from 'supertest-session'

并且一切都神奇地起作用。