首页 文章

Express.js csrf“配置错误的csrf”错误

提问于
浏览
0

我创建了一个新的Express应用程序(4.13.1)并没有添加任何内容 . 我会尝试使它与Angular一起工作,但我坚持到第一位 .

我现在正在使用express-jwt(cookies)处理身份验证,所以我不处理会话(在Redis,Mongo等中存储会话)或其他东西 .

这是我添加到app.js的内容 .

var csrf = require('csurf');

app.use(cookieParser('randomStringisHere222'));
app.use(csrf());
app.use(function(req, res, next) {
  res.cookie('XSRF-TOKEN', req.csrfToken());
  return next();
});

当我访问 localhost:3000 时,我收到上面的错误 .

misconfigured csrf

Error: misconfigured csrf
    at getsecret (/Users/itsme/Desktop/k/node_modules/csurf/index.js:195:11)
    at csrf (/Users/itsme/Desktop/k/node_modules/csurf/index.js:60:18)
    at Layer.handle [as handle_request] (/Users/itsme/Desktop/k/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/Users/itsme/Desktop/k/node_modules/express/lib/router/index.js:312:13)
    at /Users/itsme/Desktop/k/node_modules/express/lib/router/index.js:280:7
    at Function.process_params (/Users/itsme/Desktop/k/node_modules/express/lib/router/index.js:330:12)
    at next (/Users/itsme/Desktop/k/node_modules/express/lib/router/index.js:271:10)
    at cookieParser (/Users/itsme/Desktop/k/node_modules/cookie-parser/index.js:48:5)
    at Layer.handle [as handle_request] (/Users/itsme/Desktop/k/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/Users/itsme/Desktop/k/node_modules/express/lib/router/index.js:312:13)

2 回答

  • 0

    你不应该 return next();

    试试 next();

  • 0

    下面的代码对我有用 . 如果你仍然面临问题,请告诉我 .

    如前所述,您没有使用Sessions,您可以让csurf知道您使用cookie来设置CSRF令牌 .

    第1步:配置

    var csrf = require('csurf');
    var cookieparser= require('cookie-parser'); 
    
    //cookieparser must be placed before csrf 
    app.use(bodyparser.urlencoded({extended:false}));
    app.use(cookieParser('randomStringisHere222'));
    app.use(csrf({cookie:{key:XSRF-TOKEN,path:'/'}}));
    
    //add the your app routes here
    app.use("/api", person);
    app.use("/", home);
    

    第二步:在路线上,

    res.render('myViewPage',{csrfTokenFromServer:req.csrfToken()});
    

    步骤3:在HTML中为csrf标记包含一个隐藏字段示例:

    <form action="/api/person" method="POST">
          <input type="hidden" name="_csrf" value=<%=csrfTokenFromServer %> />
          First name:<br>
          <input type="text" name="firstname" value="">
          <br>
          Last name:<br>
          <input type="text" name="lastname" value="">
          <br><br>
          <input type="submit" value="Submit">
     </form>
    

相关问题