私はcsrf(クロスサイトリクエストフォージェリ)保護を次のように明示的に実装しました:
...
app.use(express.csrf());
app.use(function (req, res, next) {
res.cookie('XSRF-TOKEN', req.csrfToken());
next();
});
...
これはうまくいきます。Angularjs は、$http サービスを介して行われるすべてのリクエストで csrf トークンを利用しました。angular アプリを介して行うリクエストはうまく機能します。
私の問題は、これらの API エンドポイントをテストすることです。mocha を使用して自動テストを実行し、リクエスト モジュールを使用して API エンドポイントをテストしています。リクエスト モジュールを使用して csrf (POST、PUT、DELETE など) を使用するエンドポイントにリクエストを送信すると、Cookie などを正しく使用しているにもかかわらず、リクエストが失敗します。
他の誰かがこれに対する解決策を思いついたことがありますか? 誰かもっと情報が必要ですか?
テストの例:
function testLogin(done) {
request({
method: 'POST',
url: baseUrl + '/api/login',
json: {
email: 'myemail@email.com',
password: 'mypassword'
}
}, function (err, res, body) {
// do stuff to validate returned data
// the server spits back a 'FORBIDDEN' string,
// which obviously will not pass my validation
// criteria
done();
});
}