2016-04-16 9 views
1

Я получаю «ForbiddenError: недопустимый токен csrf», когда пытаюсь запустить мой тест регистров. Я получаю токен от моей функции, но я думаю, что я не ошибаюсь. Может быть, мне нужно как-то установить его в заголовке?недействительный токен csrf в моем регистровом тесте с mocha

мой тестовый файл

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:'[email protected]', 
       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()); 

Спасибо.

+0

Возможного дубликат [Как проверить экспресс-форму поста с CSRF?] (Http://stackoverflow.com/questions/23123664/how-to-test-express-form-post-with-csrf) – Louis

+0

У меня почти такая же настройка, как и у вас, клиент-сессии + csurf, но решение, выпущенное, не помогло мне. Можете ли вы, пожалуйста, сообщить мне, какой дополнительный шаг вы сделали, чтобы исправить это? – Larrydx

+0

Ничего, я забыл отправить cookie сеанса отправки с моим POST '.set ('cookie', res.headers ['set-cookie'])'. Работает сейчас. – Larrydx

ответ

Смежные вопросы