使用jwt标头令牌进行supertest测试

时间:2016-10-14 13:30:43

标签: express jwt superagent

我在superagent和express.js的测试中遇到了一些问题。

it('should 200 with valid login', (done) => {
    console.log(createdUser[`${validUser.email}`]['token']);
    // JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ODAwZDllZmNiM2VkMzBhOGZmMDUyOGUiLCJmaXJzdE5hbWUiOiJoYW5zIiwibGFzdE5hbWUiOiJvdHRvIiwiZW1haWwiOiJvdHRvQGV4YW1wbGUuZGUiLCJyb2xlIjoiVXNlciIsImlhdCI6MTQ3NjQ1MDc5OSwiZXhwIjoxNDc2NDYwODc5fQ.OlO_dVMCV6bm7XSyzKLFTgb-efOeyU1TniHEcIY7AHU
    request(app)
        .get('/api/protected')
        .set('Authorization', createdUser[`${validUser.email}`]['token'])
        .expect(200)
        .end((err, res)=> {
            if (err) done(err);
            console.log(res.header);
            // assert(true, 'asdfasdf');
            // done();
        });
});

我无法通过superagent访问受保护的路径。

当我访问Postman上的路径时,它正在工作,我可以使用适合的jwt访问受保护的路径。

代码中有什么变化? 我想测试不同的路径。

感谢

3 个答案:

答案 0 :(得分:0)

缺少一些信息,但这里有一些可能的答案:

  1. 您确实展示了如何创建应用。如果您使用的是像express-jwt这样的中间件,则需要在运行测试之前对其进行配置。 (app.use(expressJWt ...)

  2. 通常,使用承载架构通过授权标头发送jwt。 (即授权:Bearer eyJhbGciOiJI ......)

答案 1 :(得分:0)

设置令牌时缺少承载关键字

.set('Authorization', `Bearer ${createdUser[`${validUser.email}`]['token']}`)

答案 2 :(得分:0)

您可以使用带有 { type: ‘bearer’ } 选项的超级代理的 auth 函数:

request.auth(jwt, { type: 'bearer' })