React native Apollo setContext无法从服务器保存令牌
我想实现apollo链接上下文/react native/graphql,但apollo setContext不保存accessToken。如果我用console.log检查它,我会得到未定义。在我从服务器获取令牌之前,看起来像是setContext调用。因此setContext无法及时保存令牌。谁能帮帮我吗 App.jsReact native Apollo setContext无法从服务器保存令牌,react-native,graphql,apollo,React Native,Graphql,Apollo,我想实现apollo链接上下文/react native/graphql,但apollo setContext不保存accessToken。如果我用console.log检查它,我会得到未定义。在我从服务器获取令牌之前,看起来像是setContext调用。因此setContext无法及时保存令牌。谁能帮帮我吗 App.js import React from 'react' import { ApolloProvider } from 'react-apollo' import { Apollo
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
从“React”导入React
从'react apollo'导入{ApolloProvider}
从'react apollo hooks'导入{ApolloProvider as ApollooksProvider}
从“apollo客户端”导入{apollo客户端}
从“apollo链接http”导入{createHttpLink}
从“apollo链接上下文”导入{setContext}
从'apollo cache inmemory'导入{InMemoryCache}
从“react native Keychain”导入*作为密钥链
从“./AppNavigator”导入AppNavigator
const httpLink=createHttpLink({
uri:'http://localhost:4000'
})
const authLink=setContext(异步({headers})=>{
const tokens=wait Keychain.getGenericPassword()
const accessToken=tokens.accessToken
log('accessTokenSetContext',accessToken)
返回{
标题:{
…标题,
授权:accessToken?`Bearer${accessToken}`:''
}
}
})
const客户端=新客户端({
链接:authLink.concat(httpLink),
缓存:新的InMemoryCache(),
connectToDevTools:true
})
常量应用=()=>{
返回(
)
}
导出默认应用程序