提取用户的身份验证状态会返回意外结果

时间:2019-10-28 09:52:18

标签: javascript vue.js graphql apollo-client

我一直在和(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>

0 个答案:

没有答案