如何在 javaScript 中获取 CSRF 令牌值
Posted
技术标签:
【中文标题】如何在 javaScript 中获取 CSRF 令牌值【英文标题】:How to get CSRF token Value at javaScript 【发布时间】:2015-12-06 05:50:23 【问题描述】:我有这样的要求,当我发送请求时,CSRF-token
应该与它一起发送。我探索了一些 SO 问题,但我找不到解决方案。
我已经编写了如下代码来在发送请求时添加令牌,
var send = XMLHttpRequest.prototype.send,
token = $('meta[name=csrf-token]').attr('content');
XMLHttpRequest.prototype.send = function(data)
this.setRequestHeader('X-CSRF-Token', "xyz12345");
//this.setRequestHeader('X-CSRF-Token',getCSRFTokenValue());
return send.apply(this, arguments);
这工作正常,但现在我需要在函数中添加 CSRF-Token 来代替 xyz12345
。
我已经尝试过如下的 ajax 函数。 `
$.ajax(
type: "POST",
url: "/test/"
//data: CSRF: getCSRFTokenValue()
).done(function (data)
var csrfToken = jqXHR.getResponseHeader('X-CSRF-TOKEN');
if (csrfToken)
var cookie = JSON.parse($.cookie('helloween'));
cookie.csrf = csrfToken;
$.cookie('helloween', JSON.stringify(cookie));
$('#helloweenMessage').html(data.message);
);
但它还没有工作。 所以我的问题是: 如何获取 js 端的 CSRF-Token Value?
【问题讨论】:
问题是什么?问题是如何将 CSRF 标头或值放入 cookie 中? @limelights,我现在有 CSRF 令牌作为响应,同样的令牌我也想传递请求,所以,只是想获得CSEF-Token
的值。这里的 ajax 函数不是我的。它被采取了。
通过添加这个:token = $('meta[name=csrf-token]').attr('content');
我得到 token
未定义。
【参考方案1】:
你需要在新的 Laravel 中这样做
var csrf = document.querySelector('meta[name="csrf-token"]').content;
$.ajax(
url: 'url',
type: "POST",
data: 'value': value, '_token': csrf ,
success: function (response)
console.log('value set');
);
【讨论】:
【参考方案2】:我通过这种方式获得了我的 CSRF 令牌, 通过添加功能:
$.get('CSRFTokenManager.do', function(data)
var send = XMLHttpRequest.prototype.send,
token =data;
document.cookie='X-CSRF-Token='+token;
XMLHttpRequest.prototype.send = function(data)
this.setRequestHeader('X-CSRF-Token',token);
//dojo.cookie("X-CSRF-Token", "");
return send.apply(this, arguments);
;
);
CSRFTokenManager.do
将从 CSRFTokenManager
类调用。
现在它在每个请求的标头和cookie中添加令牌。
【讨论】:
以上是关于如何在 javaScript 中获取 CSRF 令牌值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ajax 在 LARAVEL 中获取新的 CSRF 令牌