В обновлении браузера есть что-то странное, что я не совсем уверен, как это исправить. Так что я смог реализовать токены обновления на бэкэнде, который прекрасно работает на игровой площадке. Единственная функция, которую я пока не настроил, - это недействительность старых токенов. Я храню токены в файлах 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));
этого должно быть достаточно. Но все еще сталкиваюсь с проблемой.