【问题标题】:How to manually verify CSRF token in Ajax request in Laravel如何在 Laravel 的 Ajax 请求中手动验证 CSRF 令牌
【发布时间】:2021-08-14 18:56:55
【问题描述】:

我正在构建我的第一个 Laravel 应用程序,但 ajax 请求尤其是 CSRF 验证存在问题。

我已按照documentation 中的所有步骤进行操作,但并没有完全按照其中所说的进行。

Web中间件组默认包含的App\Http\Middleware\VerifyCsrfToken中间件会自动验证请求输入中的token是否与session中存储的token匹配。

我一直在手动将“测试”连接到元标记中的所有 CSRF 令牌,并且响应仍在进行,当然不应该这样做。

我现在是否必须手动验证 CSRF 令牌?如果不是,验证通过控制器在 jquery ajax 发布请求的标头中发送令牌的最佳做法是什么?

【问题讨论】:

    标签: ajax laravel csrf


    【解决方案1】:

    我不太明白你遇到了什么错误,但这里有一些我通常会做的 Ajax 设置和调用。

    //Setup header before callin ajax
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    //Ajax call update
    $.ajax({
        url: '/posts/1/update',
        type: 'POST',
        data: {
            id: 123,
            content: 'Abc123',
        },
        complete: function (response, xhr, settings) {
            //Do something
        }
    });
    

    您无需编辑您的 VerifyCsrfToken 中间件即可完成这项工作。

    【讨论】:

    • 我没有错误。其实恰恰相反。我发送响应的 CSRF 令牌仍然被发送并不重要。我只想在验证 CSRF 时回复,但我不确定实现验证的最佳方式是什么,因为默认情况下没有设置。
    猜你喜欢
    • 2018-07-13
    • 2012-12-16
    • 1970-01-01
    • 2018-07-28
    • 2015-12-20
    • 2014-11-04
    • 2018-02-01
    • 2017-12-14
    • 2016-09-19
    相关资源
    最近更新 更多