我正在使用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
}
}
)
有人遇到过同样的问题吗?前端和后端托管在不同的域中。
您需要像这样将其添加到app.js
下的cookieParser
中:
app.use(cookieParser())
app.use(csrfProtection)
您已成功将CSRF令牌发送到/csrfToken
中的前端,但是您的应用程序正在/post
中生成了一个新令牌。
这里是相应文档的link。