TurTaskWeb/frontend/src/api/axiosapi.jsx
2023-10-31 04:09:18 +07:00

117 lines
3.5 KiB
JavaScript

import axios from 'axios';
// Create an Axios instance with common configurations
const axiosInstance = axios.create({
baseURL: 'http://127.0.0.1:8000/api/',
timeout: 5000,
headers: {
'Authorization': "Bearer " + localStorage.getItem('access_token'),
'Content-Type': 'application/json',
'accept': 'application/json',
}
});
// Add a response interceptor to handle token refresh on 401 Unauthorized errors
axiosInstance.interceptors.response.use(
response => response,
error => {
const originalRequest = error.config;
const refresh_token = localStorage.getItem('refresh_token');
// Check if the error is due to Unauthorized (401) and a refresh token is available
if (error.response.status === 401 && error.response.statusText === "Unauthorized" && refresh_token !== "undefined") {
return axiosInstance
.post('/token/refresh/', { refresh: refresh_token })
.then((response) => {
// Update access and refresh tokens
localStorage.setItem('access_token', response.data.access);
localStorage.setItem('refresh_token', response.data.refresh);
// Update the authorization header with the new access token
axiosInstance.defaults.headers['Authorization'] = "Bearer " + response.data.access;
originalRequest.headers['Authorization'] = "Bearer " + response.data.access;
return axiosInstance(originalRequest); // Retry the original request
})
.catch(err => {
console.log('Interceptors error: ', err);
});
}
return Promise.reject(error);
}
);
// Function for user login
const apiUserLogin = (data) => {
return axiosInstance
.post('token/obtain/', data)
.then((response) => {
console.log(response.statusText);
return response;
}).catch(error => {
console.log('apiUserLogin error: ', error);
return error;
});
};
// Function for user logout
const apiUserLogout = () => {
axiosInstance.defaults.headers['Authorization'] = ""; // Clear authorization header
localStorage.removeItem('access_token'); // Remove access token
localStorage.removeItem('refresh_token'); // Remove refresh token
}
// Function for Google login
const googleLogin = async (token) => {
axios.defaults.withCredentials = true
let res = await axios.post(
"http://localhost:8000/api/auth/google/",
{
token: token,
}
);
// console.log('service google login res: ', res);
return await res;
};
// Function to get 'hello' data
const getGreeting = () => {
return axiosInstance
.get('hello')
.then((response) => {
return response;
}).catch(error => {
return error;
});
}
const config = {
headers: {
"Content-Type": "application/json"
}
};
// Function to register
const createUser = async (formData) => {
try {
axios.defaults.withCredentials = true
const resposne = axios.post("http://localhost:8000/api/user/create/", formData);
// const response = await axiosInstance.post('/user/create/', formData);
return response.data;
} catch (error) {
throw error;
}
};
// Export the functions and Axios instance
export default {
axiosInstance,
apiUserLogin,
apiUserLogout,
getGreeting: getGreeting,
googleLogin,
createUser
};