Извлечение статуса авторизации пользователя возвращает неожиданные результаты - PullRequest
0 голосов
/ 28 октября 2019

Я играл с (Vue) Apollo и до сих пор у меня не было особых проблем, особенно с удаленными данными. Запрос локальных данных (состояния) - вот что вызывает у меня некоторые проблемы. Я пытаюсь получить статус авторизации пользователя, но у меня неожиданные результаты, когда ответом о выходе из системы является {data: null, loading: false, networkStatus: 7, stale: true}.

Я включил соответствующие фрагменты кода. Просто для записи, я могу успешно войти в систему и обновить кэш, в частности, статус авторизации. Запрос этой информации об авторе - моя проблема.

Редактировать : Я должен указать на это (и я только что это заметил), когда я очищаю localStorage, удаляя как маркер аутентификации, так и текущего пользователя, яполучить ожидаемый { data: { authInfo: { isAuthenticated: false, currentUser: null } } } распечатанный в консоли. Однако при входе в систему, когда маркер авторизации и текущий пользователь сохранены в хранилище браузера, у меня возникает проблема { data: null, ...}. Странно!

Аутентичное (локальное) состояние

import { InMemoryCache } from 'apollo-cache-inmemory';

const cache = new InMemoryCache();

cache.writeData({
  data: {
    authInfo: {
        isAuthenticated: !!localStorage.getItem('token'),
        currentUser: localStorage.getItem('current-user') || null,
        __typename: 'Auth'
    }
  },
});

export default cache;

Схема аутентификации

import gql from 'graphql-tag';

export const AUTH_INFO = gql`
  query AuthInfo {
    authInfo @client {
      isAuthenticated
      currentUser {
        id
        username
      }
    }
  }
`;

Запрос аутентификации

<script>
    import { AUTH_INFO } from '@/graphql/queries';

    export default {
      name: "home-page",
      methods: {
        async fetchAuthInfo() {
          try {
            const data = await this.$apollo.query({
              query: AUTH_INFO,
            });

            console.log(data);
          } catch (error) {
            console.log(error);
          }
        },
      },
      created() {
        this.fetchAuthInfo();
      },
    };
</script>
...