我已为 sails.js 应用程序启用了 csrf 保护,并正在调用路由来获取我的 POST 请求的令牌。但是,我不断收到发布请求的不匹配错误。
这是我在 POST 请求之前获取令牌的代码
jQuery.get("/csrfToken")
.done(function (oData) {
console.log("CSRF Token: " + oData._csrf);
$.ajax({
url: sUrl,
data: formData,
headers: {
'X-CSRF-Token': oData._csrf
},
processData: false,
contentType: false,
type: 'POST',
success: function (data) {
resolve(data);
console.log("upload success");
},
error: function (oError) {
console.log("upload Error" + oError);
reject(oError);
}
});
})
.fail(function (oError) {
reject({
message: "An error occurred requesting csrf:" + oError
});
当我调试路由时,我调用 post 请求并将 req.csrfToken() 与 req.headers["x-csrf-token"] 进行比较,它们都是不同的。对我哪里出错有什么建议吗?谢谢
我建议检查一下我是如何处理 CSRF 令牌的。
我已经在
.sailsrc
中禁用了内置的CSRF处理程序:https://github.com/neonexus/sails-react-bootstrap-webpack/blob/release/.sailsrc
这个自定义的
OK
响应是大多数自动化魔法开始的地方:https://github.com/neonexus/sails-react-bootstrap-webpack/blob/release/api/responses/ok.js
isLoggedIn 策略在需要时验证 CSRF 令牌:https://github.com/neonexus/sails-react-bootstrap-webpack/blob/release/api/policies/isLoggedIn.js
此帮助程序生成一个新的令牌/秘密:https://github.com/neonexus/sails-react-bootstrap-webpack/blob/release/api/helpers/generate-csrf-token-and-secret.js
此帮助程序使用新的 CSRF 令牌更新
req
对象(并更新会话过期时间):https://github.com/neonexus/sails-react-bootstrap-webpack/blob/release/api/helpers/update- csrf-and-expiry.js