如何在 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 令牌值的主要内容,如果未能解决你的问题,请参考以下文章

javascript 使用Cookie获取CSRF令牌

我必须在 React SPA 中使用 csrf 保护吗?

如何使用 ajax 在 LARAVEL 中获取新的 CSRF 令牌

Rails - 如何向用 javascript 创建的表单添加 CSRF 保护?

如何在 Jmeter 中获取用于登录的 csrf 令牌

如何从 Django 在前端获取 CSRF 令牌以及如何在 Postman 中使用它