Новые правки
This commit is contained in:
parent
48c750db0d
commit
f182c0e5b1
3 changed files with 82 additions and 26 deletions
|
|
@ -517,30 +517,62 @@ import { COMPANY } from "@constants";
|
||||||
`;
|
`;
|
||||||
|
|
||||||
document.getElementById('mobile-logout-btn')?.addEventListener('click', async () => {
|
document.getElementById('mobile-logout-btn')?.addEventListener('click', async () => {
|
||||||
try {
|
try {
|
||||||
await fetch('/api/auth/logout', { method: 'POST' });
|
await fetch('/api/auth/logout', { method: 'POST' });
|
||||||
} catch (e) {}
|
} catch (e) {
|
||||||
// Очищаем localStorage
|
console.error('Logout error:', e);
|
||||||
localStorage.removeItem('auth_token');
|
}
|
||||||
localStorage.removeItem('user');
|
|
||||||
localStorage.removeItem('pocketbase_auth');
|
// Очищаем localStorage полностью
|
||||||
// Удаляем cookie pb_auth
|
localStorage.clear();
|
||||||
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');
|
// Удаляем cookie pb_auth всеми возможными способами
|
||||||
window.location.reload();
|
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 () => {
|
document.getElementById('logout-btn')?.addEventListener('click', async () => {
|
||||||
try {
|
try {
|
||||||
await fetch('/api/auth/logout', { method: 'POST' });
|
await fetch('/api/auth/logout', { method: 'POST' });
|
||||||
} catch (e) {}
|
} catch (e) {
|
||||||
localStorage.removeItem('auth_token');
|
console.error('Logout error:', e);
|
||||||
localStorage.removeItem('user');
|
}
|
||||||
localStorage.removeItem('pocketbase_auth');
|
|
||||||
|
// Очищаем 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');
|
document.querySelector('.header-right')?.classList.remove('auth-active');
|
||||||
// Остаемся на той же странице
|
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -107,13 +107,24 @@ const firstLetter = userName ? userName.charAt(0).toUpperCase() : userEmail?.cha
|
||||||
console.error('Logout error:', e);
|
console.error('Logout error:', e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Очищаем localStorage
|
// Очищаем localStorage полностью
|
||||||
localStorage.removeItem('auth_token');
|
localStorage.clear();
|
||||||
localStorage.removeItem('user');
|
|
||||||
localStorage.removeItem('pocketbase_auth');
|
|
||||||
|
|
||||||
// Удаляем cookie pb_auth
|
// Удаляем cookie pb_auth всеми возможными способами
|
||||||
document.cookie = 'pb_auth=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT';
|
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();
|
window.location.reload();
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,23 @@
|
||||||
import type { APIRoute } from 'astro';
|
import type { APIRoute } from 'astro';
|
||||||
|
|
||||||
export const POST: APIRoute = async ({ cookies }) => {
|
export const POST: APIRoute = async ({ cookies, url }) => {
|
||||||
// Удаляем куку на сервере
|
// Удаляем куку на сервере
|
||||||
cookies.delete('pb_auth', { path: '/' });
|
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({
|
return new Response(JSON.stringify({
|
||||||
success: true,
|
success: true,
|
||||||
message: 'Вы успешно вышли из аккаунта'
|
message: 'Вы успешно вышли из аккаунта'
|
||||||
|
|
@ -12,8 +25,8 @@ export const POST: APIRoute = async ({ cookies }) => {
|
||||||
status: 200,
|
status: 200,
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'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],
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue