Javascript 当令牌写入错误时,CSURF返回EBADCSRFTOKEN

Javascript 当令牌写入错误时,CSURF返回EBADCSRFTOKEN,javascript,node.js,ajax,ejs,csrf,Javascript,Node.js,Ajax,Ejs,Csrf,我使用csurf来抵御csrf攻击 现在由于某些原因,由于以下错误,请求停止工作: message: 'invalid csrf token', code: 'EBADCSRFTOKEN' 现在我检查了什么是csrf令牌,这里有一些奇怪的东西,我得到了: { csrfToken: '\n miXCD9Di-HtygtQPxEVhUETpYQDHrKM5auE8\n ' } 通常应为: { csrfToken:'miXCD9Di-Ht

我使用csurf来抵御csrf攻击

现在由于某些原因,由于以下错误,请求停止工作:

 message: 'invalid csrf token', code: 'EBADCSRFTOKEN'
现在我检查了什么是csrf令牌,这里有一些奇怪的东西,我得到了:

{ csrfToken:
   '\n                miXCD9Di-HtygtQPxEVhUETpYQDHrKM5auE8\n            ' }
通常应为:

{ csrfToken:'miXCD9Di-HtygtQPxEVhUETpYQDHrKM5auE8'}
现在我到处都查过了,但似乎找不到什么原因

以下是一些源代码: EDIT.EJS:

 <p id="csurf" style="display: none;">
            <%=csurf%>
        </p>
BUSINESS.JS//服务器端代码

res.render("business/admin/edit", {
  title: `Edit ${doc.name}`,
  csurf: req.csrfToken(),
  biz: { ...doc, id: paramId },
});
APP.JS//以下是错误处理程序和设置

const session = require("express-session");
const csurf = require("csurf");
const flash = require("connect-flash");
var cookieParser = require("cookie-parser");


const csrfMiddleware = csurf({
  cookie: true,
});
app.use(csrfMiddleware);

// error handler
app.use(function (err, req, res, next) {
  console.log(err);

  if (err.code !== "EBADCSRFTOKEN") return next(err);
  // error handler
  console.log(req.cookies._csrf);
  var csrfToken = req.body._csrf.toString();
  console.log({csrfToken});
  // handle CSRF token errors here
  res.status(403);
  logger.warn(`Bad CSRF token: ${req.connection.remoteAddress}`);
  res.json({ message: "form tampered with", success: false });
  next();
});

您将看到模板中
中的换行符和空格。您只需使用
.trim()
即可删除它们:

const csurf = document.getElementById("csurf").innerText.trim();
您也可以只删除换行符和空格:

<p id="csurf" style="display: none;"><%=csurf%></p>

<p id="csurf" style="display: none;"><%=csurf%></p>