1
當我嘗試運行我的註冊測試時,出現「ForbiddenError:invalid csrf token」。 我確實從我的函數中獲得了一個令牌,但是我認爲我實現它是錯誤的。 也許我必須以某種方式將它設置在標題中?我的註冊測試中使用了摩卡的無效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:'[email protected]',
password:'password' })
.expect(201)
.end(done);
});
});
這裏是會話信息
var sessions = require('client-sessions');
app.use(sessions({
cookieName: 'session',
secret: 'random secret string',
}));
app.use(csrf());
感謝我的app.js的某些部分。
的可能的複製[如何測試表達形式與後CSRF?](http://stackoverflow.com/questions/23123664/how-to-test-express-form-post-with-csrf) – Louis
我的設置與客戶端會話+ csurf幾乎完全相同,但發佈的解決方案並沒有幫助我。你能否讓我來解決這個問題? – Larrydx
沒關係,我忘了發送發送會話cookie與我的POST'.set('cookie',res.headers ['set-cookie'])''。現在工作。 – Larrydx