我正在尝试使用ajax
发送一个简单的node.js
请求:
$.ajax({
type: "POST",
data: { name: "John", location: "Earth" }
})
但是我收到以下错误:
POST http://localhost:3000/ 403 (Forbidden)jquery-2.1.3.min.js:4
n.ajaxTransport.k.cors.a.crossDomain.sendjquery-2.1.3.min.js:4
n.extend.ajaxVM475:2 (anonymous function)VM465:777
InjectedScript._evaluateOnVM465:710
InjectedScript._evaluateAndWrapVM465:626 InjectedScript.evaluate
我有一个控制器设置来处理其他类型的POST请求,但由于某种原因它不会处理这个。
我认为可能是因为我在控制台中运行代码,但是当我执行以下操作时,我收到了相同的错误消息:
$(document).on('click',function() {
$.ajax({
type: "POST",
data: { name: "John", location: "Earth" }
})
});
另外,当我使用type:"GET"
时,它没有问题。 我假设它是某种跨站点脚本错误,但我不是跨站点脚本?发送此POST
请求需要做什么?
更新,我正在使用hackathon starter
包:
https://github.com/sahat/hackathon-starter#why-do-i-get-403-error-forbidden-when-submitting-a-form
其中陈述如下:
“您需要在表单中添加以下隐藏的输入元素。这已作为CSRF保护的一部分添加到拉取请求#40中。 输入(type ='hidden',name ='_ csrf',value = _csrf)
注意:现在可以将某些网址列入白名单。换句话说,您可以指定应绕过CSRF验证检查的路由列表。
注意2:要将动态URL列入白名单,请使用CSRF中间件内的正则表达式测试,以查看req.originalUrl是否与您所需的模式匹配。“
答案 0 :(得分:0)
这个问题有两种解决方案:
1)在app.js
内,将行csrf: true
更改为csrf: false
,如下所示:
app.use(lusca({
csrf: false,
xframe: 'SAMEORIGIN',
xssProtection: true
}));
2)删除lusca
模块并删除app.js
内的所有以下对它的引用:
var lusca = require('lusca');
app.use(lusca({
csrf: false,
xframe: 'SAMEORIGIN',
xssProtection: true
}));