Я пытаюсь интегрировать провайдера аутентифицированных данных в React-Admin, но у меня возникают проблемы, когда у провайдера данных еще нет действительного токена авторизации от провайдера аутентификации.
Я использую https://github.com/des-des/ra-postgraphile-client
Мой код для создания экземпляра поставщика данных выглядит следующим образом:
const dataProvider = buildPostgraphileProvider({
apolloHttpLinkOptions: {
uri: `http://localhost:5433/graphql`,
fetch: (url, options) => {
// You can add custom auth logic with a wrapper around fetch
const token = localStorage.getItem("token");
if (!token) {
return;
}
if (jwt.decode(token).exp < Date.now()) {
localStorage.removeItem("token");
return;
}
const headers = {
...options.headers,
authorization: `bearer ${token}`
};
return fetch(url, { ...options, headers });
}
}
});
console.log(dataProvider);
Я ожидал, что когда React-Admin получит ошибку от поставщика данных, он перенаправит назад на главную страницу. Но вместо этого он выбрасывает необработанное отклонение.
Unhandled Rejection (Error): Network error: Cannot read property 'then' of undefined
new ApolloError
src/errors/ApolloError.ts:46
43 | // Constructs an instance of ApolloError given a GraphQLError
44 | // or a network error. Note that one of these has to be a valid
45 | // value or the constructed error will be meaningless.
> 46 | constructor({
| ^ 47 | graphQLErrors,
48 | networkError,
49 | errorMessage,
Я также пытался вернуть HTTPError, когда токена нет:
return new HttpError("denied", 403, { status: 403 });
И получил другой результат:
Unhandled Rejection (Error): Network error: fetcher(...).then is not a function