Files
Aaron 63285f61aa
Some checks failed
Vulhub Format Check and Lint / format-check (push) Has been cancelled
Vulhub Format Check and Lint / markdown-check (push) Has been cancelled
Vulhub Docker Image CI / longtime-images-test (push) Has been cancelled
Vulhub Docker Image CI / images-test (push) Has been cancelled
first commit
2025-09-06 16:08:15 +08:00

40 lines
1.1 KiB
JavaScript

"use client";
import { useEffect, useState } from "react";
import { useRouter } from "next/navigation";
export default function Topbar() {
const [username, setUsername] = useState("");
const router = useRouter();
useEffect(() => {
// Get username from cookie on client side
const getCookie = (name) => {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(";").shift();
};
const usernameFromCookie = getCookie("next_username");
setUsername(usernameFromCookie || "");
}, []);
const handleLogout = () => {
// Delete auth cookies
document.cookie =
"next_username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
document.cookie =
"next_password=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
router.push("/login");
};
return (
<div className="d-flex align-items-center">
<span className="me-3">Welcome, {username}</span>
<button className="btn btn-danger" onClick={handleLogout}>
Logout
</button>
</div>
);
}