更新管理员登录和鉴权逻辑,优化用户体验;重构相关API以支持更安全的身份验证;调整数据库初始化以兼容新字段,确保用户信息安全;修复部分组件样式和功能,提升整体可用性。
This commit is contained in:
@@ -1,25 +1,27 @@
|
||||
// app/api/admin/route.ts
|
||||
// 后台管理API入口
|
||||
// 后台管理API入口:登录与鉴权(账号密码从环境变量读取,默认 admin / admin123)
|
||||
|
||||
import { NextRequest, NextResponse } from 'next/server'
|
||||
import {
|
||||
verifyAdminToken,
|
||||
getAdminTokenFromRequest,
|
||||
verifyAdminCredentials,
|
||||
getAdminCredentials,
|
||||
createAdminToken,
|
||||
getAdminCookieName,
|
||||
getAdminCookieOptions,
|
||||
} from '@/lib/admin-auth'
|
||||
|
||||
// 验证管理员权限
|
||||
function verifyAdmin(req: NextRequest) {
|
||||
const token = req.headers.get('Authorization')?.replace('Bearer ', '')
|
||||
|
||||
// TODO: 实现真实的token验证
|
||||
if (!token || token !== 'admin-token-secret') {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
function requireAdmin(req: NextRequest): boolean {
|
||||
const token = getAdminTokenFromRequest(req)
|
||||
return verifyAdminToken(token)
|
||||
}
|
||||
|
||||
// GET: 获取后台概览数据
|
||||
// GET: 获取后台概览数据(需已登录)
|
||||
export async function GET(req: NextRequest) {
|
||||
if (!verifyAdmin(req)) {
|
||||
if (!requireAdmin(req)) {
|
||||
return NextResponse.json(
|
||||
{ error: '未授权访问' },
|
||||
{ error: '未授权访问,请先登录' },
|
||||
{ status: 401 }
|
||||
)
|
||||
}
|
||||
@@ -58,27 +60,31 @@ export async function GET(req: NextRequest) {
|
||||
return NextResponse.json(overview)
|
||||
}
|
||||
|
||||
// POST: 管理员登录
|
||||
// POST: 管理员登录(账号密码从环境变量 ADMIN_USERNAME / ADMIN_PASSWORD 读取,默认 admin / admin123)
|
||||
export async function POST(req: NextRequest) {
|
||||
const body = await req.json()
|
||||
const { username, password } = body
|
||||
|
||||
// TODO: 实现真实的登录验证
|
||||
if (username === 'admin' && password === 'admin123') {
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
token: 'admin-token-secret',
|
||||
user: {
|
||||
id: 'admin',
|
||||
username: 'admin',
|
||||
role: 'admin',
|
||||
name: '卡若'
|
||||
}
|
||||
})
|
||||
if (!username || !password) {
|
||||
return NextResponse.json(
|
||||
{ error: '请输入用户名和密码' },
|
||||
{ status: 400 }
|
||||
)
|
||||
}
|
||||
|
||||
return NextResponse.json(
|
||||
{ error: '用户名或密码错误' },
|
||||
{ status: 401 }
|
||||
)
|
||||
if (!verifyAdminCredentials(String(username).trim(), String(password))) {
|
||||
return NextResponse.json(
|
||||
{ error: '用户名或密码错误' },
|
||||
{ status: 401 }
|
||||
)
|
||||
}
|
||||
|
||||
const token = createAdminToken()
|
||||
const res = NextResponse.json({
|
||||
success: true,
|
||||
user: { id: 'admin', username: getAdminCredentials().username, role: 'admin', name: '卡若' },
|
||||
})
|
||||
const opts = getAdminCookieOptions()
|
||||
res.cookies.set(getAdminCookieName(), token, opts)
|
||||
return res
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user