这是场景:
USER 1
-
1)进入登录页面
-
2)写入通过突变发送到服务器的电子邮件和密码
-
3)身份验证确定 - >服务器返回令牌和用户信息(id,firstName,lastName)
-
4)令牌和每个用户信息存储在本地存储中的单独密钥中
-
5)用户被重定向到主页
-
6)用户转到 Profiles 页面
-
7)向服务器发送查询以检索有关该用户的所有信息(由于存储在本地存储中的用户ID)
这是查询:
const PROFILE_QUERY = gql`
query profileQuery($id: ID!) {
getUser(id: $id) {
firstName
lastName
email
}
}
`;
export default graphql(PROFILE_QUERY, {
options: {
variables: {
id: localStorage.getItem("id")
},
errorPolicy: "all"
}
})(ProfilePage);
-
8)服务器返回信息,用户可以在配置文件页面中看到它们
-
9)用户决定退出
所以一切都适用于第一个用户,现在第二个用户到达同一台计算机和同一个浏览器 .
USER 2
-
与上一个用户的步骤相同,从1到7
-
发送到服务器以检索用户信息的查询无效,因为查询发送的id是前一个用户的id(并且不允许用户检索有关其他用户的信息)
如果我进行浏览器刷新,则使用良好的用户ID发送查询...
那么为什么第一次尝试时不刷新id变量(似乎没有读取本地存储中的id值)?我该如何解决这个问题?
谢谢您的帮助 .
2 回答
这是因为您的
options
字段是静态的,并且在首次加载包含查询的文件时进行评估 . (我假设某处,也许是步骤3或4,本地存储中的id
正确地为第二个用户更新 . )config.options可以是您现在传递的对象,也可以是查询需要时评估的函数 .
所以要每次从
localStorage
加载id
而不是一次,你可以这样做:然后第一个用户注销,您需要重置Apollo存储并清除本地存储 .