feat(project): init
This commit is contained in:
39
lib/api-auth.ts
Normal file
39
lib/api-auth.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import type { NextRequest } from "next/server";
|
||||
import { SESSION_COOKIE_NAME, getUserFromSessionToken } from "@/lib/auth";
|
||||
import type { HttpError, UserRecord } from "@/lib/types";
|
||||
|
||||
export function getApiCurrentUser(request: NextRequest): UserRecord | null {
|
||||
const sessionToken = request.cookies.get(SESSION_COOKIE_NAME)?.value;
|
||||
|
||||
return getUserFromSessionToken(sessionToken);
|
||||
}
|
||||
|
||||
export function requireApiUser(request: NextRequest): UserRecord {
|
||||
const user = getApiCurrentUser(request);
|
||||
|
||||
if (!user) {
|
||||
const error = new Error("请先登录。") as HttpError;
|
||||
error.statusCode = 401;
|
||||
throw error;
|
||||
}
|
||||
|
||||
if (!user.isActive) {
|
||||
const error = new Error("当前账号已被禁用。") as HttpError;
|
||||
error.statusCode = 403;
|
||||
throw error;
|
||||
}
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
export function requireApiAdmin(request: NextRequest): UserRecord {
|
||||
const user = requireApiUser(request);
|
||||
|
||||
if (user.role !== "admin") {
|
||||
const error = new Error("需要管理员权限。") as HttpError;
|
||||
error.statusCode = 403;
|
||||
throw error;
|
||||
}
|
||||
|
||||
return user;
|
||||
}
|
||||
Reference in New Issue
Block a user