使用 Apollo 进行本地授权:使用令牌创建客户端。无法将令牌设置为标头

Posted

技术标签:

【中文标题】使用 Apollo 进行本地授权:使用令牌创建客户端。无法将令牌设置为标头【英文标题】:React Native authorization with Apollo: create client with token. Cannot set token to header 【发布时间】:2020-03-25 06:08:28 【问题描述】:
let [loading, setLoading] = useState(true);
let client = new ApolloClient(
    uri: 'https://39990dea.ngrok.io/graphql',
);

let init = async () => 
    let token = await AsyncStorage.getItem('token');
    if (!!token) 
        store.dispatch(userLoaded(token));
        client = new ApolloClient(
            request: (operation) => 
                operation.setContext(
                    headers: 
                        authorization: token ? token : '',
                    ,
                );
            ,
        );
        console.warn('user with token created');
        console.warn(token);
        console.warn('token is taken');
    
    setLoading(false);
;
useEffect(init, []);

我正在创建 apollo 客户端。然后,如果 AsyncStorage 中有令牌,我将标头设置为使用令牌请求。

return (
<ApolloProvider client=client>
    <Provider store=store>
        <AppNavigator/>
    </Provider>
</ApolloProvider>

);

但是当我提出请求时,出现 Graphql error: notoken。是不是我做错了什么?

【问题讨论】:

【参考方案1】:

您正在初始化您的客户端并异步更改它,但您的组件没有重新渲染。所以你有两个选择:

useState 让你的应用重新渲染

调用forceUpdate函数

【讨论】:

以上是关于使用 Apollo 进行本地授权:使用令牌创建客户端。无法将令牌设置为标头的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React 组件中向 Apollo 客户端添加新的授权标头?

在 Apollo 客户端上注销

使用 graphql 和 apollo 客户端刷新 Angular 令牌

Nuxt / Apollo - 设置授权标头

Apollo Client V2 以错误的顺序获取数据

使用令牌的 websocket 授权