Express VueJS和快速传递csrf令牌到post
我在后端使用VueJS(cli3)和axios,以及NodeJS-ExpressJS。我正在尝试使用CSRF令牌保护我的post用户编辑 Vue视图(编辑用户-焦点到mySubmitEd): 获取用户的后端控制器:Express VueJS和快速传递csrf令牌到post,express,vue.js,axios,Express,Vue.js,Axios,我在后端使用VueJS(cli3)和axios,以及NodeJS-ExpressJS。我正在尝试使用CSRF令牌保护我的post用户编辑 Vue视图(编辑用户-焦点到mySubmitEd): 获取用户的后端控制器: controller.getOneUser = function(req, res) { User.findOne({ _id: req.params.userId }).exec(function(err, user) { res.json({user, csrfTok
controller.getOneUser = function(req, res) {
User.findOne({ _id: req.params.userId }).exec(function(err, user) {
res.json({user, csrfToken: req.csrfToken()});
});
};
后端更新帖子:
controller.updateUser = function(req, res) {
User.findById(req.body._id, function(err, user) {
user.set({
name: req.body.name,
last_name: req.body.last_name,
permalink: req.body.permalink,
price: req.body.price
});
user.save();
res.send(user);
});
};
NodeJS exress控制台中的我的错误:
ForbiddenError: invalid csrf token
我在浏览器中的错误:
POST http://localhost:7000/api/update-user 403 (Forbidden)
我不知道发生了什么,因为我在网络选项卡(chrome)中看到csrf令牌在标题和我发送的内容(例如)中是相同的:
我不知道我错过了什么。我找不到问题出在哪里
如果您需要更多信息,请让我帮助您。我必须正确地将cookie的标题传递给您,因此我做了两个更正: Vue视图中的第一个: 我通过了认证:
axios.create({withCredentials: true}).get(...)
及
第二,在路由之前的server.js文件中,我将:
...
const corsOptions = {
origin: 'http://localhost:8080',
credentials: true,
}
app.use(cors(corsOptions));
app.use(bodyParser.json());
app.use(cookieParser());
const csrfProtection = csurf({ cookie: true });
app.use(csrfProtection);
app.use(function (req, res, next) {
res.cookie('XSRF-TOKEN', req.csrfToken());
res.locals._csrf = req.csrfToken();
next();
});
...
X-CSRF-TOKEN: PddyOZrf-AdHppP3lMuWA2n7AuD8QWFG3ta0
_csrf: "PddyOZrf-AdHppP3lMuWA2n7AuD8QWFG3ta0"
axios.create({withCredentials: true}).get(...)
axios.create({withCredentials: true}).post(...)
...
const corsOptions = {
origin: 'http://localhost:8080',
credentials: true,
}
app.use(cors(corsOptions));
app.use(bodyParser.json());
app.use(cookieParser());
const csrfProtection = csurf({ cookie: true });
app.use(csrfProtection);
app.use(function (req, res, next) {
res.cookie('XSRF-TOKEN', req.csrfToken());
res.locals._csrf = req.csrfToken();
next();
});
...