react-native - Apollo setContext 无法从服务器保存令牌
问题描述
我想实现 apollo-link-context/react-native/graphql,但是 Apollo setContext 不保存 accessToken。如果我用 console.log 检查它,我会得到未定义的。在我从服务器获取令牌之前,它看起来像 setContext 调用。因此 setContext 无法及时保存令牌。有人可以帮我吗
应用程序.js
import React from 'react'
import { ApolloProvider } from 'react-apollo'
import { ApolloProvider as ApolloHooksProvider } from 'react-apollo-hooks'
import { ApolloClient } from 'apollo-client'
import { createHttpLink } from 'apollo-link-http'
import { setContext } from 'apollo-link-context'
import { InMemoryCache } from 'apollo-cache-inmemory'
import * as Keychain from 'react-native-keychain'
import AppNavigator from './AppNavigator'
const httpLink = createHttpLink({
uri: 'http://localhost:4000'
})
const authLink = setContext(async (_, { headers }) => {
const tokens = await Keychain.getGenericPassword()
const accessToken = tokens.accessToken
console.log('accessTokenSetContext', accessToken)
return {
headers: {
...headers,
authorization: accessToken ? `Bearer ${accessToken}` : ''
}
}
})
const client = new ApolloClient({
link: authLink.concat(httpLink),
cache: new InMemoryCache(),
connectToDevTools: true
})
const App = () => {
return (
<ApolloProvider client={client}>
<ApolloHooksProvider client={client}>
<AppNavigator />
</ApolloHooksProvider>
</ApolloProvider>
)
}
export default App
解决方案
推荐阅读
- python - 如何让 TensorFlow 使用所有 CPU
- wpf - 如何从视图模型触发一些代码在视图中运行?
- javascript - 如何每秒打印 nth-child(n) 的索引?
- azure - 公司品牌不适用于 Azure 门户中的密码页面
- android - 在应用程序为后台并杀死后使用 gsm 单元位置获取 cid 和 lac
- javascript - 反应 css 优先级
- docker - 如何为 .sh 脚本编写 Docker 文件
- ms-access - Microsoft Access 2013 - Windows 10 - 弹出窗口消失
- nginx - nginx重定向到另一台服务器
- asp.net-mvc - 文件上传操作没有被调用