feat: update authentication for the web app

This commit is contained in:
2026-07-11 12:58:56 +07:00
parent 9845a1702f
commit 8cd10aefdc
20 changed files with 1063 additions and 57 deletions
+18 -4
View File
@@ -4,6 +4,7 @@ import { useState, useEffect } from "react";
import { Card, Button, Input } from "@/shared/components";
export default function LoginPage() {
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
const [error, setError] = useState("");
const [resetHint, setResetHint] = useState("");
@@ -67,7 +68,7 @@ export default function LoginPage() {
const res = await fetch("/api/auth/login", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ password }),
body: JSON.stringify({ username, password }),
});
if (res.ok) {
@@ -143,7 +144,7 @@ export default function LoginPage() {
<p className="text-text-muted">
{authMode === "oidc" && oidcConfigured
? "Sign in with your OIDC provider to access the dashboard"
: "Enter your password to access the dashboard"}
: "Enter your username and password to access the dashboard"}
</p>
</div>
@@ -193,6 +194,19 @@ export default function LoginPage() {
</p>
)}
<div className="flex flex-col gap-2">
<label className="text-sm font-medium">Username</label>
<Input
type="text"
placeholder="Enter username"
value={username}
onChange={(e) => setUsername(e.target.value)}
required
autoComplete="username"
autoFocus={!oidcAvailable}
/>
</div>
<div className="flex flex-col gap-2">
<label className="text-sm font-medium">Password</label>
<Input
@@ -201,7 +215,7 @@ export default function LoginPage() {
value={password}
onChange={(e) => setPassword(e.target.value)}
required
autoFocus={!oidcAvailable}
autoComplete="current-password"
/>
{error && <p className="text-xs text-red-500">{error}</p>}
{retryAfter > 0 && (
@@ -227,7 +241,7 @@ export default function LoginPage() {
</Button>
<p className="text-xs text-center text-text-muted mt-2">
Default password is <code className="bg-sidebar px-1 rounded">123456</code>
Default administrator login: <code className="bg-sidebar px-1 rounded">admin</code> / <code className="bg-sidebar px-1 rounded">123456</code>
</p>
{hasPassword === false && (
<p className="text-xs text-center text-amber-600 dark:text-amber-400">