From b298e69f7b10a4665534c5ef93298cc6eafc24de Mon Sep 17 00:00:00 2001 From: Web-serfer Date: Thu, 7 May 2026 18:40:57 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/blog/comments/Comments.tsx | 9 +-------- frontend/src/lib/pb.ts | 19 ------------------- frontend/src/pages/api/auth/sign-out.ts | 11 ++++++++++- frontend/src/pages/blog/[slug].astro | 16 ++++++++++------ 4 files changed, 21 insertions(+), 34 deletions(-) diff --git a/frontend/src/components/blog/comments/Comments.tsx b/frontend/src/components/blog/comments/Comments.tsx index 5e12b68..7135665 100644 --- a/frontend/src/components/blog/comments/Comments.tsx +++ b/frontend/src/components/blog/comments/Comments.tsx @@ -14,10 +14,8 @@ interface CommentsProps { } export default function Comments(props: CommentsProps) { - console.log('[Comments] SSR isAuthorized:', props.isAuthorized); const [isAuthenticated, setIsAuthenticated] = createSignal(props.isAuthorized ?? false); - console.log('[Comments] Initial isAuthenticated:', isAuthenticated()); -const [currentUser, setCurrentUser] = createSignal<{ + const [currentUser, setCurrentUser] = createSignal<{ id: string; name: string; email: string; @@ -305,11 +303,6 @@ const [currentUser, setCurrentUser] = createSignal<{ )} - {/* DEBUG */} -
- SSR isAuthorized: {String(props.isAuthorized)} | client isAuth: {String(isAuthenticated())} -
- {isLoading() ? (
diff --git a/frontend/src/lib/pb.ts b/frontend/src/lib/pb.ts index d898212..8f364bc 100644 --- a/frontend/src/lib/pb.ts +++ b/frontend/src/lib/pb.ts @@ -5,25 +5,6 @@ const PB_URL = import.meta.env.PB_POCKETBASE_URL || 'http://127.0.0.1:8090'; export const pb = new PocketBase(PB_URL); -if (typeof window !== 'undefined') { - const token = localStorage.getItem('auth_token'); - const userStr = localStorage.getItem('user'); - - // Инициализируем куку из localStorage если её нет - if (token && !document.cookie.includes('pb_auth')) { - document.cookie = `pb_auth=${token}; path=/; max-age=${7 * 24 * 60 * 60}; SameSite=Lax`; - } - - if (token && userStr) { - try { - const user = JSON.parse(userStr); - pb.authStore.save(token, user); - } catch (e) { - console.error('Failed to restore auth:', e); - } - } -} - export interface PostVotes { id: string; post_id: string; diff --git a/frontend/src/pages/api/auth/sign-out.ts b/frontend/src/pages/api/auth/sign-out.ts index 3552495..18de29e 100644 --- a/frontend/src/pages/api/auth/sign-out.ts +++ b/frontend/src/pages/api/auth/sign-out.ts @@ -1,10 +1,19 @@ import type { APIRoute } from 'astro'; export const POST: APIRoute = async ({ cookies }) => { + // Удаляем куку на сервере cookies.delete('pb_auth', { path: '/' }); + // Возвращаем заголовок для удаления куки на клиенте return new Response(JSON.stringify({ success: true, message: 'Вы успешно вышли из аккаунта' - }), { status: 200 }); + }), { + status: 200, + headers: { + 'Content-Type': 'application/json', + // Принудительно удаляем куку на клиенте + 'Set-Cookie': 'pb_auth=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT', + } + }); }; \ No newline at end of file diff --git a/frontend/src/pages/blog/[slug].astro b/frontend/src/pages/blog/[slug].astro index 1774a3c..bfe20ac 100644 --- a/frontend/src/pages/blog/[slug].astro +++ b/frontend/src/pages/blog/[slug].astro @@ -23,15 +23,17 @@ if (!post) { return Astro.redirect('/blog'); } -// SSR проверка авторизации +// SSR проверка авторизации - используем реальную проверку через API let isAuthorized = false; const pbAuthCookie = Astro.cookies.get('pb_auth')?.value; +console.log('[SSR] Cookie exists:', !!pbAuthCookie); + if (pbAuthCookie && PB_POCKETBASE_URL && PB_POCKETBASE_URL.startsWith('http')) { try { const token = pbAuthCookie.trim(); - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), 5000); + + console.log('[SSR] Token preview:', token.substring(0, 20) + '...'); const response = await fetch(`${PB_POCKETBASE_URL}/api/collections/users/auth-refresh`, { method: 'POST', @@ -39,18 +41,20 @@ if (pbAuthCookie && PB_POCKETBASE_URL && PB_POCKETBASE_URL.startsWith('http')) { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json', }, - signal: controller.signal, }); - clearTimeout(timeoutId); + console.log('[SSR] PB response:', response.status); if (response.ok) { + const data = await response.json(); + console.log('[SSR] Auth valid, user:', data.record?.email); isAuthorized = true; } else { + console.log('[SSR] Auth invalid, deleting cookie'); Astro.cookies.delete('pb_auth', { path: '/' }); } } catch (e) { - console.error('[SSR Auth] Error:', e); + console.error('[SSR] Error:', e.message); } }