我正在使用react-native和apollo客户端,如果我尝试通过存储在AsyncStorage中的jwt设置头,它似乎不工作。
其他不需要标题的解析器工作得很好。我的代码如下。
import { ApolloClient } from "apollo-client";
import { InMemoryCache } from "apollo-cache-inmemory";
import { ApolloLink } from "apollo-link";
import { createHttpLink } from "apollo-link-http";
import AsyncStorage from "@react-native-community/async-storage";
const cache = new InMemoryCache();
const getToken = async () => {
const token = await AsyncStorage.getItem("jwt");
if (token) {
return token;
} else {
return null;
}
};
const httpLink = new createHttpLink({
uri: ""
});
const authLink = new ApolloLink((operation, forward) => {
operation.setContext({
headers: {
"X-JWT": getToken()
// this is where I set headers by getToken function
// If I change function getToken to real token in string type, it works then
}
});
return forward(operation);
});
const client = new ApolloClient({
cache: cache,
link: authLink.concat(httpLink)
});
export default client;
就像我在代码中评论的那样,调用getToken函数并不是我所期望的那样。我想我应该有更多关于异步和等待的知识,但是我不明白真实的的问题是什么。
我从控制台收到的错误消息是jwt malformed
。请告诉我如何解决此问题
4条答案
按热度按时间cnwbcb6i1#
尝试直接使用
setContext
ws51t4hk2#
jecbmhm33#
问题是你没有等待承诺。这意味着它应该是
await getToken()
。为了使它工作,ApolloLink函数也应该是async
。这会降低你的性能,因为在每次请求时,它都会从你的
AsyncStore
中读取令牌。6ojccjat4#
谢谢@ Lex dyky,这是我的最新版本