diff --git a/surfsense_web/app/desktop/login/page.tsx b/surfsense_web/app/desktop/login/page.tsx index 0d91588e1..f18cc5214 100644 --- a/surfsense_web/app/desktop/login/page.tsx +++ b/surfsense_web/app/desktop/login/page.tsx @@ -17,8 +17,7 @@ import { ShortcutKbd } from "@/components/ui/shortcut-kbd"; import { Spinner } from "@/components/ui/spinner"; import { useElectronAPI } from "@/hooks/use-platform"; import { searchSpacesApiService } from "@/lib/apis/search-spaces-api.service"; -import { setBearerToken } from "@/lib/auth-utils"; -import { buildBackendUrl } from "@/lib/env-config"; +import { setBearerToken, setRefreshToken } from "@/lib/auth-utils"; type ShortcutKey = "generalAssist" | "quickAsk" | "screenshotAssist"; type ShortcutMap = typeof DEFAULT_SHORTCUTS; @@ -237,10 +236,17 @@ export default function DesktopLoginPage() { [updateShortcut] ); - const handleGoogleLogin = () => { + const handleGoogleLogin = async () => { if (isGoogleRedirecting) return; setIsGoogleRedirecting(true); - window.location.href = buildBackendUrl("/auth/google/authorize-redirect"); + try { + await api?.startGoogleOAuth?.(); + await autoSetSearchSpace(); + router.push("/auth/callback"); + } catch (error) { + setIsGoogleRedirecting(false); + toast.error(error instanceof Error ? error.message : "Google sign-in failed"); + } }; const autoSetSearchSpace = async () => { @@ -266,16 +272,20 @@ export default function DesktopLoginPage() { password, grant_type: "password", }); + const refreshToken = (data as { refresh_token?: string | null }).refresh_token; if (typeof window !== "undefined") { sessionStorage.setItem("login_success_tracked", "true"); } setBearerToken(data.access_token); + if (refreshToken) { + setRefreshToken(refreshToken); + } await autoSetSearchSpace(); setTimeout(() => { - router.push(`/auth/callback?token=${data.access_token}`); + router.push("/auth/callback"); }, 300); } catch (err) { if (err instanceof Error) { diff --git a/surfsense_web/app/invite/[invite_code]/page.tsx b/surfsense_web/app/invite/[invite_code]/page.tsx index 959a6d6d1..fee3f4647 100644 --- a/surfsense_web/app/invite/[invite_code]/page.tsx +++ b/surfsense_web/app/invite/[invite_code]/page.tsx @@ -30,8 +30,9 @@ import { } from "@/components/ui/card"; import { Spinner } from "@/components/ui/spinner"; import type { AcceptInviteResponse } from "@/contracts/types/invites.types"; +import { useSession } from "@/hooks/use-session"; import { invitesApiService } from "@/lib/apis/invites-api.service"; -import { getBearerToken, setRedirectPath } from "@/lib/auth-utils"; +import { setRedirectPath } from "@/lib/auth-utils"; import { trackSearchSpaceInviteAccepted, trackSearchSpaceInviteDeclined, @@ -43,6 +44,7 @@ export default function InviteAcceptPage() { const params = useParams(); const router = useRouter(); const inviteCode = params.invite_code as string; + const session = useSession(); const { data: inviteInfo = null, isLoading: loading } = useQuery({ queryKey: cacheKeys.invites.info(inviteCode), @@ -81,11 +83,9 @@ export default function InviteAcceptPage() { // Check if user is logged in useEffect(() => { - if (typeof window !== "undefined") { - const token = getBearerToken(); - setIsLoggedIn(!!token); - } - }, []); + if (session.status === "loading") return; + setIsLoggedIn(session.status === "authenticated"); + }, [session.status]); const handleAccept = async () => { setAccepting(true); diff --git a/surfsense_web/app/verify-token/route.ts b/surfsense_web/app/verify-token/route.ts index 9df460779..4016600b7 100644 --- a/surfsense_web/app/verify-token/route.ts +++ b/surfsense_web/app/verify-token/route.ts @@ -15,6 +15,7 @@ export async function GET(request: NextRequest) { headers: { Authorization: request.headers.get("authorization") || "", "X-API-Key": request.headers.get("x-api-key") || "", + Cookie: request.headers.get("cookie") || "", }, cache: "no-store", });