【问题标题】:Where do you put the CSRF token in Relay/GraphQL?您将 CSRF 令牌放在 Relay/GraphQL 中的什么位置?
【发布时间】:2015-12-13 14:52:50
【问题描述】:

我正在尝试使用我的 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 传递给服务器。去哪儿了?

【问题讨论】:

标签: laravel reactjs csrf graphql relayjs


【解决方案1】:

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

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

Relay.DefaultNetworkLayer 的第二个参数被传递给fetch(input, init)init 参数。请参阅Relay Network Layer Guide 了解更多信息。

【讨论】:

  • 谢谢!太简单!我一直在想我需要在没有 jQuery 的情况下获取 dom attr('content')。
  • 如果你根本不想使用jQuery,你可以使用document.querySelector('meta[name="csrf-token"]').getAttribute('content')获取token
猜你喜欢
  • 2016-05-03
  • 2012-08-25
  • 2019-09-05
  • 2013-12-28
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 2018-09-23
  • 2018-03-15
相关资源
最近更新 更多