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(); };