来自redux商店Apollo Client的访问令牌,显示[对象生成器]

问题描述 投票:0回答:1

我花了一段时间尝试实现这一目标,但到目前为止,我还没有找到正确的方法。我想访问我的存储令牌在redux商店中,我正在使用redux-saga,grapqhql和Apollo Client。

ApolloClient身份验证

const authlink = new ApolloLink((operation, forward) => {
  const token = grabToken() // this grabToken is a redux-saga
   if(isLoggedIn() {
     operation.setContext({
       headers: {
        'authorization': `Bearer ${token}`,
      }
    })
  }
  return forward(operation)
})

Redux-Saga功能

function* grabToken() {
  return yield select(makeSelectToken())
}

Selector.js

const makeSelectToken = () => 
 createSelector(
  selectGlobal),
  globalState => globalState.token,
);

在浏览器的网络选项卡中,我看到授权:承载[对象生成器],有人知道如何获取此saga函数的值吗?

我也尝试过这样的事情:

const authlink = new ApolloLink((operation, forward) => {
  const token = grabToken().next() // this grabToken is a redux-saga
   if(isLoggedIn() {
     operation.setContext({
       headers: {
        'authorization': `Bearer ${JSON.stringify(token)}`,
      }
    })
  }
  return forward(operation)
})

但是我在浏览器中看到以下响应:{“ value”:{“ @@ redux-saga / IO”:true,“ combinator”:false,“ type”:“ SELECT”,“ payload”:{“ args”:[]}},“ done “:false}

javascript reactjs react-redux redux-saga apollo-client
1个回答
0
投票

您不得存储令牌const token = grabToken()

您应该这样使用

const authlink = new ApolloLink((operation, forward) => {
 if(isLoggedIn() {
   operation.setContext({
     headers: {
      'authorization': `Bearer ${grabToken()}`,
    }
  })
}
return forward(operation)})

因为正在使用生成器函数。它异步运行,所以必须在每个请求时调用该函数。

© www.soinside.com 2019 - 2024. All rights reserved.