react-native - [GraphQL 错误] : Context Creation Failed during Signin with React & Apollo

标签 react-native apollo react-apollo

最初我的身份验证工作正常。然后我离开计算机并再次返回代码,这一次,我的身份验证失败并显示以下消息

[GraphQL 错误]:消息:上下文创建失败:您的 session 已结束。请重新登录,位置:未定义,路径:未定义

我已经为 token 设置了到期时间。我尝试在登录前清除缓存,但仍然出现上述错误。

下面是我的登录功能代码

 _handleSubmit = (values, bag, signIn) => {
    signIn({
      variables: {
        email: values.email,
        password: values.password
      }
    })
      .then(async ({ data }) => {
        if (data && data.signIn.token) {
          await AsyncStorage.setItem("token", data.signIn.token);
          this.props.navigation.navigate("Main");
        }
      })
      .catch(err => {
        bag.setSubmitting(false);
        bag.setErrors(err);
      });
  };

我的堆栈是 apollo、mongodb、react-native。我怀疑问题可能出在缓存上。我试图清除缓存,但按“R”清除了 Expo 上的缓存,但我仍然无法登录。

[更新] 错误是由于 jwt token 已过期。当我在 getUser 函数中使用 console.log(@res, res) 时出现此错误

{ TokenExpiredError: jwt 过期...

有趣的是,我为每个登录创建了一个新的 jwt token 。下面是我的 createToken 和 getUser 代码

以前有人遇到过这种情况吗?你怎么解决?
const createToken = (user, expiresIn) => {
  const { _id, email } = user;
  //creturn jwt.sign({ _id, email }, process.env.SECRET_KEY, { expiresIn });
  return jwt.sign({ _id, email }, process.env.SECRET_KEY);
};


const getUser = async token => {
  if (token) {
    try {
      const res = await jwt.verify(token, process.env.SECRET_KEY);
      console.log("@res ", res);
      return res;
    } catch (error) {
      console.log("@error ", error);
      throw new AuthenticationError(
        "Your session has ended. Please sign in again"
      );
    }
  }
};

谢谢

最佳答案

我在我的 ApolloClient 的 authLink 中运行...

await AsyncStorage.removeItem("token"); 

然后将其注释掉,它再次起作用了!
const authLink = setContext(async (req, { headers }) => {
  // await AsyncStorage.removeItem("token");
  const token = await AsyncStorage.getItem("token");
  console.log("@token ", token);

  return {
    headers: {
      ...headers,
      authorization: token ? `${token}` : ""
    }
  };
});

关于react-native - [GraphQL 错误] : Context Creation Failed during Signin with React & Apollo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54546153/

相关文章:

reactjs - React Native ListView 性能太慢?

android - FaSTLane 分发失败,错误为 "App Distribution could not find your app"

javascript - Apollo : `updateQuery` not working properly with `subscribeToMore` 中自动 UI 更新的问题

activemq - 最大 MQTT 连接数

reactjs - 不变违规 : Query(. ..) : Nothing was returned from render. 这通常意味着缺少 return 语句

javascript - React Native 动态改变 View 的背景颜色

react-native - React Native - 在浏览器中打开链接

apollo - 在 Apollo 客户端中,我如何能够记录或拦截所有操作(查询和突变)

reactjs - 如何将 graphQL 查询变量传递到装饰的 React 组件中

javascript - React-apollo 更新与重新获取