2026-08-06 17:44:49 +03:00

57 lines
1.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export const saveAuthTokens = (data) => {
const { access_token, refresh_token, expires_in } = data;
// TODO: раскомментировать, когда поправят expires_in на бэке
// const expiresAt = Date.now() + expires_in * 1000
localStorage.setItem('access_token', access_token);
localStorage.setItem('refresh_token', refresh_token);
// localStorage.setItem('expires_at', expiresAt.toString())
};
export const getAuthToken = () => {
const access_token = localStorage.getItem('access_token');
return access_token;
};
export const isTokenExpired = () => {
try {
const token = getAuthToken();
if (!token) {
return true;
}
// TODO: с бэка сейчас приходит expired_in: null. Если поправят, то это логика будет не нужна. Пока что оставляю так
const base64 = token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/');
const jsonPayload = decodeURIComponent(
atob(base64)
.split('')
.map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
.join(''),
);
const payload = JSON.parse(jsonPayload);
const now = Math.floor(Date.now() / 1000);
// для проверки времени жизни токена
const expirationDate = new Date(payload.exp * 1000);
console.log('Токен истекает:', expirationDate.toLocaleString('ru-RU'));
return payload.exp < now;
} catch (err) {
console.error('Ошибка при разборе токена:', err.message);
return true;
}
};
export const clearAuthTokens = () => {
localStorage.removeItem('access_token');
localStorage.removeItem('refresh_token');
};
// TODO: отсутствует функционал обновления токена. добавить логику когда сделают на бэке. пока просто очистка LS
export const updateToken = () => {
clearAuthTokens();
};