fix(auth) : keep Guide sessions beyond Sudloh token expiry
This commit is contained in:
@@ -15,7 +15,7 @@ import {
|
||||
} from "lucide-react";
|
||||
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { AccountMenu } from "@/components/auth/account-menu";
|
||||
import { SignOutButton } from "@/components/auth/sign-out-button";
|
||||
import { CommissionPushEntryPrompt } from "@/components/commission/push-entry-prompt";
|
||||
|
||||
export function AdminHeader() {
|
||||
@@ -100,7 +100,7 @@ export function AdminHeader() {
|
||||
>
|
||||
<ExternalLinkIcon />
|
||||
</Button>
|
||||
<AccountMenu admin />
|
||||
<SignOutButton admin />
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
@@ -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>;
|
||||
}
|
||||
@@ -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>;
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import { PencilIcon } from "lucide-react";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { VisitorPresence } from "@/components/public/visitor-presence";
|
||||
import { PublicNavigation } from "@/components/public/public-navigation";
|
||||
import { AccountMenu } from "@/components/auth/account-menu";
|
||||
import { SignOutButton } from "@/components/auth/sign-out-button";
|
||||
import { getAdminSession } from "@/lib/auth/server";
|
||||
import { HttpError } from "@/lib/security/http";
|
||||
|
||||
@@ -45,7 +45,7 @@ export function SiteHeader({ editHref = "/admin", guideId }: { editHref?: string
|
||||
<div className="hidden lg:block">
|
||||
<VisitorPresence guideId={guideId} />
|
||||
</div>
|
||||
<AccountMenu />
|
||||
<SignOutButton />
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user