首页 > 解决方案 > 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

标签: react-nativegraphqlapollo

解决方案


推荐阅读