我的寄存器测试中使用mocha的无效csrf令牌

时间:2016-04-16 15:06:14

标签: node.js testing mocha

我得到了#34; ForbiddenError:无效的csrf令牌"当我尝试运行我的注册测试时。 我确实从我的函数中获得了一个令牌,但我认为我执行错误了。 也许我必须以某种方式在标题中设置它?

我的测试文件

var request = require('supertest');
var server = request.agent(config.TEST_URL);

// function to get the csrf token from the client
function extractCsrfToken (res) {
    var $ = cheerio.load(res.text);
    return $('[name=_csrf]').val();
}

describe('POST /register', function () {

    var csrfToken;

    beforeEach(function (done) {
        server.get('/register')
            .end(function (err, res) {
                if (err) return done(err);
                csrfToken = extractCsrfToken(res); // fetch the csrf token from client
                done();
            });
    });

    it('should accept the result', function (done, res) {
        server
            .post('/register')
            .send({
                _csrf: csrfToken,
                username: 'testing',
                email:'mjo@test.com',
                password:'password' })
            .expect(201)
            .end(done);
    });

});

以下是我的app.js的一部分,其中包含会话信息

var sessions = require('client-sessions');

app.use(sessions({
    cookieName: 'session',
    secret: 'random secret string',
}));

app.use(csrf());

感谢。

1 个答案:

答案 0 :(得分:2)

这个主题的接受答案帮助我解决了问题

How to test express form post with CSRF?