我花了一段时间尝试实现这一目标,但到目前为止,我还没有找到正确的方法。我想访问我的存储令牌在redux商店中,我正在使用redux-saga,grapqhql和Apollo Client。
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)
})
function* grabToken() {
return yield select(makeSelectToken())
}
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}
您不得存储令牌const token = grabToken()
您应该这样使用
const authlink = new ApolloLink((operation, forward) => {
if(isLoggedIn() {
operation.setContext({
headers: {
'authorization': `Bearer ${grabToken()}`,
}
})
}
return forward(operation)})
因为正在使用生成器函数。它异步运行,所以必须在每个请求时调用该函数。