Новые правки

This commit is contained in:
Web-serfer 2026-05-07 20:20:55 +05:00
parent 48c750db0d
commit f182c0e5b1
3 changed files with 82 additions and 26 deletions

View file

@ -517,30 +517,62 @@ import { COMPANY } from "@constants";
`;
document.getElementById('mobile-logout-btn')?.addEventListener('click', async () => {
try {
await fetch('/api/auth/logout', { method: 'POST' });
} catch (e) {}
// Очищаем localStorage
localStorage.removeItem('auth_token');
localStorage.removeItem('user');
localStorage.removeItem('pocketbase_auth');
// Удаляем cookie pb_auth
document.cookie = 'pb_auth=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT';
document.querySelector('.header-right')?.classList.remove('auth-active');
window.location.reload();
try {
await fetch('/api/auth/logout', { method: 'POST' });
} catch (e) {
console.error('Logout error:', e);
}
// Очищаем localStorage полностью
localStorage.clear();
// Удаляем cookie pb_auth всеми возможными способами
const cookieName = 'pb_auth';
const domains = ['', window.location.hostname, '.' + window.location.hostname];
const paths = ['/', '/api'];
domains.forEach(domain => {
paths.forEach(path => {
document.cookie = `${cookieName}=; path=${path}; domain=${domain}; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT`;
document.cookie = `${cookieName}=; path=${path}; domain=${domain}; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Lax`;
document.cookie = `${cookieName}=; path=${path}; domain=${domain}; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Strict`;
});
});
// Альтернативный способ - перезапись пустым значением
document.cookie = 'pb_auth=; path=/; max-age=0';
document.cookie = 'pb_auth=; path=/; expires=1970-01-01';
document.querySelector('.header-right')?.classList.remove('auth-active');
window.location.reload();
});
}
// Обработчик выхода
document.getElementById('logout-btn')?.addEventListener('click', async () => {
try {
await fetch('/api/auth/logout', { method: 'POST' });
} catch (e) {}
localStorage.removeItem('auth_token');
localStorage.removeItem('user');
localStorage.removeItem('pocketbase_auth');
} catch (e) {
console.error('Logout error:', e);
}
// Очищаем localStorage полностью
localStorage.clear();
// Удаляем cookie pb_auth всеми возможными способами
const cookieName = 'pb_auth';
const domains = ['', window.location.hostname, '.' + window.location.hostname];
const paths = ['/', '/api'];
domains.forEach(domain => {
paths.forEach(path => {
document.cookie = `${cookieName}=; path=${path}; domain=${domain}; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT`;
document.cookie = `${cookieName}=; path=${path}; domain=${domain}; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Lax`;
document.cookie = `${cookieName}=; path=${path}; domain=${domain}; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Strict`;
});
});
document.querySelector('.header-right')?.classList.remove('auth-active');
// Остаемся на той же странице
window.location.reload();
});

View file

@ -107,13 +107,24 @@ const firstLetter = userName ? userName.charAt(0).toUpperCase() : userEmail?.cha
console.error('Logout error:', e);
}
// Очищаем localStorage
localStorage.removeItem('auth_token');
localStorage.removeItem('user');
localStorage.removeItem('pocketbase_auth');
// Очищаем localStorage полностью
localStorage.clear();
// Удаляем cookie pb_auth
document.cookie = 'pb_auth=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT';
// Удаляем cookie pb_auth всеми возможными способами
const cookieName = 'pb_auth';
const domains = ['', window.location.hostname, '.' + window.location.hostname];
const paths = ['/', '/api'];
domains.forEach(domain => {
paths.forEach(path => {
document.cookie = `${cookieName}=; path=${path}; domain=${domain}; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT`;
document.cookie = `${cookieName}=; path=${path}; domain=${domain}; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Lax`;
document.cookie = `${cookieName}=; path=${path}; domain=${domain}; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Strict`;
});
});
// Альтернативный способ
document.cookie = 'pb_auth=; path=/; max-age=0';
// Полностью перезагружаем страницу
window.location.reload();

View file

@ -1,10 +1,23 @@
import type { APIRoute } from 'astro';
export const POST: APIRoute = async ({ cookies }) => {
export const POST: APIRoute = async ({ cookies, url }) => {
// Удаляем куку на сервере
cookies.delete('pb_auth', { path: '/' });
// Возвращаем заголовок для удаления куки на клиенте
const host = url.hostname;
const isSecure = url.protocol === 'https:';
// Формируем заголовки для удаления cookie со всех возможных комбинаций
const setCookieHeaders = [
'pb_auth=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT',
'pb_auth=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Lax',
'pb_auth=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Strict',
'pb_auth=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; Secure',
`pb_auth=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=${host}`,
`pb_auth=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=.${host}`,
];
// Возвращаем заголовки для удаления куки на клиенте
return new Response(JSON.stringify({
success: true,
message: 'Вы успешно вышли из аккаунта'
@ -12,8 +25,8 @@ export const POST: APIRoute = async ({ cookies }) => {
status: 200,
headers: {
'Content-Type': 'application/json',
// Принудительно удаляем куку на клиенте - два варианта для надежности
'Set-Cookie': 'pb_auth=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT',
// Основной заголовок для удаления
'Set-Cookie': setCookieHeaders[0],
}
});
};