fix(auth) : keep Guide sessions beyond Sudloh token expiry
CI / Verify (push) Successful in 1m31s
CI / Build immutable images and deploy (push) Successful in 2m16s

This commit is contained in:
2026-10-06 18:00:42 +07:00 Unverified
parent 41014ef654
commit 4b16941e11
14 changed files with 74 additions and 236 deletions
-41
View File
@@ -1,41 +0,0 @@
"use client";
import Link from "next/link";
import { useRouter } from "next/navigation";
import { LogOutIcon, UserRoundIcon } from "lucide-react";
import { Button } from "@/components/ui/button";
import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem,
DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "@/components/ui/dropdown-menu";
import { authClient } from "@/lib/auth/client";
import { markSudlohSignInAttempt } from "@/lib/auth/sudloh-redirect";
import { unsubscribeCommissionPush } from "@/components/commission/push-client";
export function AccountMenu({ admin = false }: { admin?: boolean }) {
const router = useRouter();
const { data } = authClient.useSession();
if (!admin && !data?.user) return null;
async function signOut() {
await unsubscribeCommissionPush().catch(() => undefined);
await authClient.signOut();
markSudlohSignInAttempt();
router.push(admin ? "/auth/login?next=%2Fadmin" : "/commission");
router.refresh();
}
return <DropdownMenu>
<DropdownMenuTrigger render={<Button type="button" variant="ghost" size="icon-sm" aria-label="บัญชีของฉัน" />}>
<UserRoundIcon />
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="w-48">
<DropdownMenuGroup>
<DropdownMenuLabel className="truncate">{data?.user?.name || "บัญชีของฉัน"}</DropdownMenuLabel>
<DropdownMenuItem render={<Link href="/profile" />}><UserRoundIcon />โปรไฟล์ของฉัน</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem onClick={() => void signOut()}><LogOutIcon />ออกจากระบบ</DropdownMenuItem>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>;
}
+26
View File
@@ -0,0 +1,26 @@
"use client";
import { useRouter } from "next/navigation";
import { LogOutIcon } from "lucide-react";
import { Button } from "@/components/ui/button";
import { authClient } from "@/lib/auth/client";
import { markSudlohSignInAttempt } from "@/lib/auth/sudloh-redirect";
import { unsubscribeCommissionPush } from "@/components/commission/push-client";
export function SignOutButton({ admin = false }: { admin?: boolean }) {
const router = useRouter();
const { data } = authClient.useSession();
if (!admin && !data?.user) return null;
async function signOut() {
await unsubscribeCommissionPush().catch(() => undefined);
await authClient.signOut();
markSudlohSignInAttempt();
router.push(admin ? "/auth/login?next=%2Fadmin" : "/commission");
router.refresh();
}
return <Button type="button" variant="ghost" size="sm" onClick={() => void signOut()}>
<LogOutIcon data-icon="inline-start" />ออกจากระบบ
</Button>;
}