'Refresh token is working, but showing error message- React Native
I am struggling to find out the issue with my refresh token mechanism. I have a some problem that I can't fix. Refresh token is working, but it showing an alert 'somthingWentWrong' but the application is still in a good state and working properly.
Here is my code, please tell me where is my mistake?
import axios from 'axios';
import config from './env';
import { Alert } from 'react-native';
import { Constants, storeData } from '@utils';
import { store } from '@data/store';
import { t } from 'i18next';
enum StatusCode {
BadRequest = 400,
Unauthorized = 401,
Fobbiden = 403,
NotFound = 404,
NotAllowed = 405,
Conflict = 409,
ServerError = 500,
}
const getErrorMessage = (error: any): string => {
if (error?.request?.responseURL?.includes('Authentication/signin') && error?.request === StatusCode.Fobbiden) {
return t('invalidEmailOrPassword');
} else if (error?.response?.data) {
return error.response.data;
} else if (error?.response?.data?.length) {
return error.response.data;
} else {
return t('somethingWentWrong');
}
};
export const createAxios = () => {
const baseURL = config.apiUrl;
const token = store.getState()?.auth?.token;
const refreshToken = store.getState()?.auth?.refreshToken;
let headers: any = { 'Content-Type': 'application/json' };
if (token) {
headers = { ...headers, Authorization: `Bearer ${token}` };
}
const instance = axios.create({ baseURL, headers });
instance.interceptors.response.use(
(res) => Promise.resolve(res.data),
async (error) => {
if (error?.request?.status === StatusCode.Unauthorized) {
try {
const body = { token: token, refreshToken: refreshToken };
const _instance = axios.create({ baseURL: config.apiUrl, headers: headers });
const tokenResponse = await _instance.post(config.token_url, body);
if (tokenResponse) {
await store.dispatch({ type: '[AUTH] SET_TOKEN', payload: tokenResponse?.data?.accessToken });
await store.dispatch({ type: '[AUTH] SET_REFRESH_TOKEN', payload: tokenResponse?.data?.refreshToken });
await storeData(Constants.asyncKeys.AUTH_TOKEN, tokenResponse?.data?.accessToken);
await storeData(Constants.asyncKeys.REFRESH_TOKEN, tokenResponse?.data?.refreshToken);
headers.Authorization = 'Bearer ' + tokenResponse?.data?.accessToken;
error.config.headers.Authorization = 'Bearer ' + tokenResponse?.data?.accessToken;
const failedResponse = await axios.request(error.config);
if (failedResponse) {
return failedResponse.data;
}
}
// eslint-disable-next-line no-shadow
} catch (error: any) {
error.request.status && Alert.alert(t('error'), getErrorMessage(error));
}
return Promise.reject(error?.response);
}
return Promise.reject(error?.response);
},
);
return instance;
};
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
