您将 CSRF 令牌放在 Relay/GraphQL 的什么位置?

Where do you put the CSRF token in Relay/GraphQL?

我正在尝试使用我的 Laravel 服务器设置 Relay 和 GraphQL。我已成功设置 Laravel 以服务 GraphQL。

过去,为了使用 jQuery 进行 ajax 调用,我在 master.blade.php 中添加了以下内容:

 <meta name="csrf-token" content="{{ csrf_token() }}">

以及我的 main.js 文件中的以下内容:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

我的 GraphQL 端点当前返回令牌不匹配异常。在我看来,Relay 需要以类似于 jQuery.ajax 的方式将 csrf-token 传递给服务器。它去了哪里?

配置您的网络层以将 headers 附加到每个请求:

Relay.injectNetworkLayer(
  new Relay.DefaultNetworkLayer('/graphql', {
    headers: {
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
    },
  })
);

Relay.DefaultNetworkLayer 的第二个参数传递给 fetch(input, init). See the Relay Network Layer Guideinit 参数以获取更多信息。