我正在使用Laravel 5应用程序,该应用程序默认为所有POST请求启用CSRF保护。我喜欢这种增加的安全性,因此我正在尝试使用它。
发出简单$.post()
请求时,我收到一个'Illuminate\Session\TokenMismatchException'
错误,因为_token
POST数据中缺少所需的表单输入。这是一个有关$
.post请求的示例:
var userID = $("#userID").val();
$.post('/admin/users/delete-user', {id:userID}, function() {
// User deleted
});
我将CSRF令牌存储为标头中的meta字段,可以使用以下命令轻松访问它:
var csrf_token = $('meta[name="csrf-token"]').attr('content');
是否可以在所有传出$.post()
请求中将其附加到json数据?我尝试使用标头,但Laravel似乎无法识别它们-
var csrf_token = $('meta[name="csrf-token"]').attr('content');
alert(csrf_token);
$.ajaxPrefilter(function(options, originalOptions, jqXHR){
if (options['type'].toLowerCase() === "post") {
jqXHR.setRequestHeader('X-CSRFToken', csrf_token);
}
});
您的$.ajaxPrefilter
方法是一种很好的方法。但是,您不需要添加标题。您只需要在data
字符串中添加一个属性。
数据作为的第二个参数提供$.post
,然后id=foo&bar=baz&...
在预过滤器访问data
选项之前格式化为查询字符串()。因此,您需要在查询字符串中添加自己的字段:
var csrf_token = $('meta[name="csrf-token"]').attr('content');
$.ajaxPrefilter(function(options, originalOptions, jqXHR){
if (options.type.toLowerCase() === "post") {
// initialize `data` to empty string if it does not exist
options.data = options.data || "";
// add leading ampersand if `data` is non-empty
options.data += options.data?"&":"";
// add _token entry
options.data += "_token=" + encodeURIComponent(csrf_token);
}
});
这将id=userID
变成id=userID&_token=csrf_token
。
我试图创建一个带有动态预填充字段的Django表单:也就是说,当从下拉菜单中选择一个字段()时,其他字段会自动预填充相应的数据。为此,我希望在选择下拉选项后立即向服务器发送POST请求。 到目前为止,我已经尝试了以下模板(以下https://docs.djangoproject.com/en/2.0/ref/csrf/): 但是,当我选择一个下拉选项时,我会得到一个 新:17未捕获的语法错误:意外
概述 我将使用API网关作为基于Spring Security性的身份验证。我刚刚按照https://spring.io/guides/tutorials/spring-security-and-angular-js/链接中的步骤创建了一个基于其对应的github项目的“对双”模块的项目https://github.com/spring-guides/tut-spring-security-and
我正在尝试通过Ajax从数据库中删除数据。 HTML: 我的ajax代码: 这是我要从数据库中提取数据的查询... 但当我单击“删除链接数据未删除”并显示csrf_token不匹配时...
问题内容: 我试图通过ajax从数据库中删除数据。 HTML: 我的ajax代码: 这是我从数据库中获取数据的查询… 但是当我单击删除链接数据未删除并显示csrf_token不匹配… 问题答案: 您必须在ajax请求中添加 数据 。我希望这样会有用。
我遇到了CodeIgniter/CSRF/JSON的问题。 我正在向PHP后端发送内容类型为“application/json”的http POST请求。有效负载是json数据。我将与数据一起传递生成并存储在CSRF cookie中的CSRF令牌。对于标准POST表单请求,它工作正常,但作为json发送时失败。 由于$\u POST数组因JSON内容类型而为空,CodeIgniter无法验证coo
我正在开发一个应用程序与Django后端和Next.js前端。我试图使用提取API将数据从前端发布到后端。我有问题传递一个有效的CSRF令牌在我的POST数据到Django。 我试图通过在POST请求中包含一个X-CSRFToken头并使用Django文档中推荐的JavaScript Cookie库获取其值来实现这一点。 这是我的提取请求: 我从Django那里得到的错误当然是说没有设置CSRF