86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
import axios from 'axios';
|
|
import Cookies from 'js-cookie';
|
|
|
|
const api = axios.create({
|
|
baseURL: 'http://127.0.0.1:8000/api',
|
|
timeout: 2500,
|
|
withCredentials: true,
|
|
});
|
|
|
|
export const createUser = async (userData) => {
|
|
const response = await api.post('/users', userData);
|
|
const { access, refresh } = response.data;
|
|
|
|
Cookies.set('refresh', refresh,{
|
|
expires: 1,
|
|
secure: true,
|
|
sameSite: 'strict',
|
|
});
|
|
sessionStorage.setItem('access_token', access);
|
|
return response.data
|
|
};
|
|
|
|
export const loginUser = async (userData) => {
|
|
const response = await api.post('/token/', userData);
|
|
const { access, refresh } = response.data;
|
|
|
|
Cookies.set('refresh', refresh,{
|
|
expires: 1,
|
|
secure: true,
|
|
sameSite: 'strict',
|
|
});
|
|
sessionStorage.setItem('access_token', access);
|
|
return response.data;
|
|
};
|
|
|
|
export const updateUser = async (userData) => {
|
|
const response = await api.put('/users/me/', userData, {
|
|
headers: {Authorization: `Bearer ${sessionStorage.getItem('access_token')}`},
|
|
});
|
|
return response.data;
|
|
}
|
|
export const getuserinfo = async () => {
|
|
const response = await api.get('/users/me/', {
|
|
headers: {Authorization: `Bearer ${sessionStorage.getItem('access_token')}`},
|
|
});
|
|
return response.data;
|
|
};
|
|
const refreshAccessToken = async () => {
|
|
try {
|
|
const response = await api.post('/token/refresh', {'refresh': Cookies.get('refresh')}, {
|
|
withCredentials: true,
|
|
});
|
|
|
|
const { access, refresh } = response.data;
|
|
|
|
return [access, refresh];
|
|
} catch (error) {
|
|
console.error('Refresh token request failed:', error);
|
|
return null;
|
|
}
|
|
};
|
|
|
|
api.interceptors.response.use(
|
|
(response) => response,
|
|
async (error) => {
|
|
if (error.response && error.response.status === 401) {
|
|
const errorMessage = error.response.data.detail;
|
|
if (errorMessage === "No active account found with the given credentials") {
|
|
return Promise.reject(error);
|
|
} else {
|
|
const tokens = await refreshAccessToken();
|
|
if (tokens) {
|
|
const [newAccessToken, newRefreshToken] = tokens;
|
|
Cookies.set('refresh', newRefreshToken, {
|
|
expires: 1,
|
|
secure: true,
|
|
sameSite: 'strict',
|
|
});
|
|
error.config.headers['Authorization'] = `Bearer ${newAccessToken}`;
|
|
return api(error.config);
|
|
}
|
|
}
|
|
}
|
|
return Promise.reject(error);
|
|
}
|
|
); |