Node.js-csurf无效的csrf令牌

问题描述 投票:0回答:1

我正在使用npm模块csurf生成令牌。首先,我从服务器获取令牌,然后将其用于/ register请求。当我用邮递员复制相同的步骤时,它似乎可以工作,但不幸的是,在应用程序中却没有。那里总是抛出令牌无效的错误消息

-服务器端---

csrfProtection.js

import csrf from 'csurf';

export default csrf({
  cookie: true
});

router.js

import csrfProtection from './../../config/csrfProtection'
router.get('/csrfToken', csrfProtection, async (req, res, next) => {
  return res.send(req.csrfToken());
});

router.post(
  '/register',
  validationHelper({ validation: registerUserValidation }),
  csrfProtection,
  async (req, res, next) => {
    return res.send('user registered');
  }
);

app.js

const app = express();

app.use(cookieParser());
app.use(
  cors()
);
app.use(compression());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

-客户端---

const token = await this.$axios.$get('/csrfToken')
// token has the value 1KFmMJVz-dspX9TJo8oRInPzgDA1VY28uqQw

    await this.$axios.$post(
      '/register',
      {
        name: 'test456',
        email: '[email protected]',
        password: '123456789'
      },
      {
        headers: {
          'csrf-token': token
        }   
      }
    )

有人遇到过同样的问题吗?前端和后端托管在不同的域中。

enter image description hereenter image description here

javascript node.js ajax axios csrf
1个回答
0
投票

您需要像这样将其添加到app.js下的cookieParser中:

app.use(cookieParser())
app.use(csrfProtection)

您已成功将CSRF令牌发送到/csrfToken中的前端,但是您的应用程序正在/post中生成了一个新令牌。

这里是相应文档的link

© www.soinside.com 2019 - 2024. All rights reserved.