ruby-on-rails 将Rails从6.1.7升级到7.0.4后- @vue/apollo-composable useQuery不执行请求

sz81bmfz  于 2023-03-20  发布在  Ruby
关注(0)|答案(1)|浏览(129)

我正在升级使用以下堆栈的应用:
宝石:

rails 6.1.7
graphql 2.0.19

国家预防机制:

@apollo/client 3.7.10
@vue/apollo-composable ^4.0.0-beta.4
vue ^3.2.47

这个很好用。
但是如果我把rails升级到7.0.4,就没有GraphQL请求了。没有错误(后端和前端都没有),但是没有网络请求了。这是什么原因呢?我试着用debugger停止前端代码,然后从控制台发出useQuery,但是什么都没有发生。
进一步调试:
安装了Postman,我可以毫无问题地发出请求。我在Firefox、Chrome和现在的Edge中试过,它们都没有发生请求。
也许值得注意的是,我通过Vite(vite_rails)提供JS模块,但我在Rails6中使用了相同的方法。
我怀疑后端的一些CORS或XSS标头更改会使Apollo甚至不尝试执行请求。

a0x5cqrl

a0x5cqrl1#

发现问题。由于Rails 7中的某些原因...

<%= csrf_meta_tags %>
<%= csp_meta_tag %>

...放置在application.html.erb中的未输出任何内容。
在我构建authLink的application.js中,我有:

const authLink = setContext((_, { headers }) => {
  const csrfToken = document.
    querySelector('meta[name="csrf-token"]').
    attributes.content.value;

  return {
    headers: {
      ...headers,
      'X-CSRF-Token': csrfToken,
      authorization: tokenStore.authorization,
    },
  }
})

很明显,csrfToken周围的一些东西正在悄悄地失败,因为页面上不存在那个 meta标记。然后我在ApolloClient中使用authLink

const apolloClient = new ApolloClient({
  link: authLink.concat(afterwareLink.concat(httpLink)),
  cache: new InMemoryCache(),
  connectToDevTools: true,
})

所以我的整个apolloClient都坏了,这就是为什么没有请求会被触发。

相关问题