您将 CSRF 令牌放在 Relay/GraphQL 中的啥位置?
Posted
技术标签:
【中文标题】您将 CSRF 令牌放在 Relay/GraphQL 中的啥位置?【英文标题】: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 传递给服务器。去哪儿了?
【问题讨论】:
你是如何将 Relay 与 graphql-laravel 一起使用的?我认为它需要与 Relay 兼容。打开一个问题github.com/Folkloreatelier/laravel-graphql/issues/9 【参考方案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以上是关于您将 CSRF 令牌放在 Relay/GraphQL 中的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章