NodeJSアプリケーションでcsrfを使用しようとしています。 以下のコードを見ることができます。このコードを実行すると、 "TypeError:req.csrfTokenは関数ではありません"というエラーが表示されます。
すべての要求に対してcsrfトークンを作成し、ajax呼び出しでcsrfトークンをチェックしたいとします。私が言ったように、私はcsrfトークンを作成できません、私はエラーが発生しています。また、ajax呼び出しでcsrfトークンをチェックする方法は?
私を助けることができますか?
おかげNodeJSのCSRFの使用
サーバー側:
var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var csrf = require('csurf');
var bodyParser = require('body-parser');
/*this line commented*/
//var csrfProtection = csrf({ cookie: false });
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
var parseForm = bodyParser.urlencoded({ extended: false });
app.use(cookieParser());
/*this line added*/
app.use(csrf({ cookie: false }));
app.use(session({
genid: function (req) {
return "lkgktktgjknvfndkj-dfgjnkdfkjgn-dfgdfg";
},
name: "mySecret",
resave: false, // don't save session if unmodified
saveUninitialized: false, // don't create session until something stored
secret: 'thisIsASecret'
}));
app.use(express.static(path.join(__dirname, 'public')));
app.use(function (req, res, next) {
res.locals.csrfToken = req.csrfToken();
next();
});
app.get('/', /*csrfProtection,*/ function (req, res) {
res.render('index')
});
app.post('/process', parseForm, /*csrfProtection,*/ function (req, res) {
res.send('data is being processed')
});
Index.jade csrf()
返す関数(source)を呼び出す
meta(name="csrf-token", content="#{csrfToken}")
block content
input(type="hidden" name="_csrf" value="#{csrfToken}")
|Favorite color: <input type="text" name="favoriteColor">
button(type="submit" id="sbmt") Submit
script(src= "/javascripts/jquery-2.2.1.js")
script.
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
var token;
if (!options.crossDomain) {
token = $('meta[name="csrf-token"]').attr('content');
if (token) {
return jqXHR.setRequestHeader('X-CSRF-Token', token);
}
}
});
$("#sbmt").click(function (e) {
e.preventDefault();
$.post(
"/process",
{
//text: text,
_csrf : $('meta[name="csrf-token"]').attr('content')
}, function (data) {
console.log(data);
});
});
こんにちは、私はこの行にコメントしました:// var csrfProtection = csrf({cookie:false });私はapp.use(csrf({cookie:false}))を追加しました。 cookieparserの後のセッション使用の前に。私はルートでcsrfProtectionの使用を削除しました。今回は "misconfigured csrf"エラーが表示されます。 –
私のコードを編集しました。私に「間違った構成のcsrf」エラーが出ます。 –
私は答えを更新しました。 –