我开始学习NodeJ,并由于对js的了解而努力,我开始编写一些代码来创建用户注册逻辑.
本质上,我已经通过以下方式配置ExpressJS:
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const session = require('express-session');
const csrf = require('csurf');
const cookieParser = require('cookie-parser');
app.use(session({
secret: 'foofofoo',resave: false,saveUninitialized: true,cookie: { secure: true }
}));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(csrf());
app.use(function (req,res,next) {
var csrfToken = req.csrfToken();
res.cookie('XSRF-TOKEN',csrfToken);
res.locals.csrfToken = csrfToken;
next();
});
然后我为用户注册创建了一个基本的.ejs视图:
">
User Name
Password
Register
csrfToken由上面的中间件使用.
当用户按下regForm按钮时,此代码称为:
$("#regForm").click(function () {
let uname = $("#uname").val();
let upass = $("#upass").val();
let token = document.querySelector('@R_403_338@[name="csrf-token"]').getAttribute('content');
let regData =
{
'name': uname,'pass': upass
};
$.ajax({
type: 'POST',url: '/registerUser',headers: {"X-CSRF-Token": token },data: regData,success: function (data) {
$("#mainDiv").html(data);
}
});
});
并查看ajax请求,正确传递令牌:
但是在控制台中,我得到了:
ForbiddenError: invalid csrf token
这是路由方法:
app.post('/registerUser',function(req,next){
//todo
});