Обновление браузера приводит к тому, что клиент apollo прекращает отправку файлов cookie на сервер - PullRequest
0 голосов
/ 19 июня 2019

В обновлении браузера есть что-то странное, что я не совсем уверен, как это исправить. Так что я смог реализовать токены обновления на бэкэнде, который прекрасно работает на игровой площадке. Единственная функция, которую я пока не настроил, - это недействительность старых токенов. Я храню токены в файлах cookie, которые получает клиент apollo (как токен доступа, так и обновления), когда я запускаю мутацию входа в систему. У меня закончилось время, и все, кажется, работает. У меня также есть проверка текущего пользователя на каждой странице. Поскольку запросы кэшируются автоматически, они обычно запускаются только один раз.

Однако, когда я обновляю страницу, currentUser возвращает undefined. НО. Токены все еще в браузере! При использовании cookie-файлов он исчезает на долю секунды, поэтому я не уверен, загружается ли apollo-client без токенов, таким образом, это новый экземпляр Apollo? Мне интересно, сталкивался ли кто-нибудь с этой проблемой раньше?

index.vue

<template>
  <div>
    <p v-if="$apollo.loading">Loading...</p>
    <h1 v-else>{{ me.firstname }}'s profile</h1>
  </div>
</template>

<script>
import { USER_QUERY } from "@/gql/graphql"

export default {
  data() {
    return {
      me: {}
    }
  },

  apollo: {
    me: {
      query: USER_QUERY
    }
  }
}
</script>

\ Plugins \ Аполлон-client.js

import { InMemoryCache } from "apollo-cache-inmemory"
import { persistCache } from "apollo-cache-persist"

const cache = new InMemoryCache()

if (process.browser) {
  try {
    persistCache({
      cache,
      storage: window.localStorage
    })
  } catch (error) {
    console.error("Error restoring Apollo cache", error)
  }
}

export default function() {
  return {
    cache,
    httpEndpoint: "http://localhost:4000/graphql",
    httpLinkOptions: {
      credentials: "include"
    }
  }
}

Конфигурация Apollo в nuxt.config

  apollo: {
    errorHandler(error) {
      console.log(error.message)
    },
    clientConfigs: {
      default: "~/plugins/apollo-client.js"
    }
  }

edit: Я не совсем уверен, если это проблема Apollo или Vue, любая помощь будет принята с благодарностью!

edit2: Итак, я понял, что клиент apollo не передает куки после обновления. Так что я думаю, что-то не так с моим конфигом. Хотя после нескольких крошек,

httpLinkOptions: {
      credentials: "include"
    }

как показано выше, должно быть достаточно во внешнем интерфейсе, в то время как бэкэнд:

let corsOptions = {
  origin: 'http://localhost:3000',
  credentials: true
}

app.use(cors(corsOptions));

этого должно быть достаточно. Но все еще сталкиваюсь с проблемой.

...