import { ApolloClient } from 'apollo-client';
const apolloClient = new ApolloClient({
...
refreshTokens: async () => {
// 刷新token代码
},
...
});
import axios from 'axios';
const refreshTokens = async () => {
const refreshToken = localStorage.getItem('refreshToken');
try {
const response = await axios.post('/api/token/refresh', { refreshToken });
localStorage.setItem('accessToken', response.data.accessToken);
localStorage.setItem('refreshToken', response.data.refreshToken);
} catch (error) {
console.error(error);
}
};
import { ApolloLink } from 'apollo-link';
import { HttpLink } from 'apollo-link-http';
const httpLink = new HttpLink({
uri: 'http://localhost:4000/graphql'
});
const authMiddleware = new ApolloLink((operation, forward) => {
const accessToken = localStorage.getItem('accessToken');
operation.setContext({
headers: {
authorization: accessToken ? `Bearer ${accessToken}` : ''
}
});
return forward(operation).map(response => {
const context = operation.getContext();
const { response: { headers } } = context;
if (headers) {
const accessToken = headers.get('accessToken');
const refreshToken = headers.get('refreshToken');
if (accessToken) {
localStorage.setItem('accessToken', accessToken);
}
if (refreshToken) {
localStorage.setItem('refreshToken', refreshToken);
}
}
return response;
});
});
const apolloClient = new ApolloClient({
link: authMiddleware.concat(httpLink),
...
});