gpt4 book ai didi

javascript - 创建后更新 Apollo 客户端身份验证链接

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:23:48 27 4
gpt4 key购买 nike

我正在使用 token 通过 Apollo Client 验证对我的服务器的请求,并复制了文档中提供的以下示例:

const httpLink = createHttpLink({ uri: 'http://0.0.0.0:3003' });

const authLink = setContext((_, { headers }) => {
// get the authentication token from local storage if it exists
const token = localStorage.getItem('token');
// return the headers to the context so httpLink can read them
return {
headers: {
...headers,
authorization: token ? `Bearer ${token}` : '',
},
};
});

const apolloClient = new ApolloClient({
link: authLink.concat(httpLink),
});

这很好用,但 token 最终会过期,我需要更新 Apollo Client 使用的 token 。

如果不实例化新的 Apollo Client,我该怎么做?

最佳答案

我找到了不止一种使用 Apollo Links 解决此问题的方法。

我采用的方法(由于我的应用程序身份验证的结构方式)是使用 setContext method from apollo-link-context .

例如

import { setContext } from "apollo-link-context";
import { from } from 'apollo-link';

const authMiddleware = setContext((operation, { headers }) => {
return getToken().then(data => {
return {
headers: {
...headers,
authorization: `Bearer ${data.token}` || null,
}
};
});
});

const apolloClient = new ApolloClient({
link: from([authMiddleware, httpLink]),
cache,
});

现在每次发出请求时,都会在 header 上设置一个 token 。编写 getToken 函数时要小心,以免每次向 Apollo 发出请求时都调用新 token 。

还有一个specific Link for refreshing tokens .

关于javascript - 创建后更新 Apollo 客户端身份验证链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55287887/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com