Итак, мы создаем приложение React-Native с использованием Apollo и GraphQL. Я использую аутентификацию на основе JWT (когда пользователь регистрируется как activeToken и refreshToken ) и хочу реализовать поток, в котором токен обновляется автоматически, когда сервер замечает, что срок его действия истек.
Документы Apollo для Apollo-Link-Error предоставляют хорошую начальную точку для отлова ошибки от ApolloClient:
onError(({ graphQLErrors, networkError, operation, forward }) => {
if (graphQLErrors) {
for (let err of graphQLErrors) {
switch (err.extensions.code) {
case 'UNAUTHENTICATED':
// error code is set to UNAUTHENTICATED
// when AuthenticationError thrown in resolver
// modify the operation context with a new token
const oldHeaders = operation.getContext().headers;
operation.setContext({
headers: {
...oldHeaders,
authorization: getNewToken(),
},
});
// retry the request, returning the new observable
return forward(operation);
}
}
}
Однако я действительно изо всех сил пытаюсь понять, как реализовать getNewToken () . В моей конечной точке GraphQL есть средство для создания новых токенов, но я не могу вызвать его из-за Apollo-Link-Error, верно?
Так как же вы обновите sh токен, если токен создан в GraphQL? конечная точка, к которой подключится ваш клиент Apollo?