7

我有这样的要求,当我发送请求时,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 值?

4

2 回答 2

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');
        }
    });
于 2021-02-08T21:39:19.697 回答
0

我通过这种方式获得了我的 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中添加令牌。

于 2015-10-28T10:41:47.027 回答