2

axios用来在内外发送请求preload。但我不明白由于某种原因我的后端抱怨必须提供 JWT。我将相同的后端与另一个前端(Svelte 仅与 Axios)一起使用,并且没有抱怨。但是在 Sapper 中,当我使用带有凭据的 axios 请求时(是的)。我得到 jwt 必须提供。

当我在后端记录请求 URL 时,我知道 Sapper 向后端发送了两次请求 URL,一个带有凭证,另一个没有凭证,这导致必须提供 JWT。我很确定带有凭据的请求来自 axios,但没有凭据的请求来自魔术。这种魔法发生在哪里?为什么?

<script context="module">

  import axios from 'axios'

  const ax = axios.create({
    withCredentials: true,
    baseURL: 'http://localhost:7000',
    headers: { 'Content-Type': 'application/json' },
  })

  export async function preload (page) {
    const {data} = await ax.get(`/profile/${page.query.type}`)
    let profiles = data
    return { profiles, page }
  }

</script>

4

1 回答 1

1

我有类似的问题(预加载之外),我的问题是 Sappers 服务器端代码正在发布第一个请求,而 Sappers 客户端代码正在发布第二个请求(这是因为如果我理解正确,Sapper 具有服务器端渲染,而 Sapper 是在将代码发送到第二次运行的浏览器之前也运行您的代码)。

您能否在 axios 请求之前添加一些正在检查if (process.browser) { [...] }(或是否存在window或其他浏览器专有变量)的 if 语句?

服务器端代码显然无法从用户浏览器访问 cookie 或 localStorage,因此 JWT 将为空。

于 2019-11-06T11:56:28.270 回答