2016-04-16 27 views
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的某些部分。

+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

回答