【问题标题】:Express.js csrf "misconfigured csrf" errorExpress.js csrf“错误配置 csrf”错误
【发布时间】:2016-04-06 02:55:50
【问题描述】:

我创建了一个新的 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)

【问题讨论】:

标签: express csrf


【解决方案1】:

你不应该return next();

试试next();

【讨论】:

    【解决方案2】:

    下面的代码对我有用。如果您仍然遇到问题,请告诉我。

    如前所述,您没有使用 Sessions,您已经让 csurf 知道您正在使用 cookie 来设置 CSRF 令牌。

    第一步:配置

    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()}); 
    

    Step3:在 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>
    

    【讨论】:

      猜你喜欢
      • 2017-07-20
      • 2018-10-31
      • 1970-01-01
      • 2017-04-12
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      相关资源
      最近更新 更多