import NextAuth from "next-auth" import CredentialsProvider from "next-auth/providers/credentials" import { prisma } from "@/app/lib/prisma" import bcrypt from "bcryptjs" const handler = NextAuth({ providers: [ CredentialsProvider({ name: "Credentials", credentials: { username: { label: "用户名", type: "text" }, password: { label: "密码", type: "password" }, }, async authorize(credentials) { if (!credentials?.username || !credentials?.password) { return null } const user = await prisma.user.findUnique({ where: { username: credentials.username as string }, }) if (!user) { return null } const isValid = await bcrypt.compare( credentials.password as string, user.password ) if (!isValid) { return null } return { id: user.id.toString(), email: user.email, name: user.name || user.username, role: user.role, } }, }), ], session: { strategy: "jwt", }, callbacks: { async jwt({ token, user }) { if (user) { token.role = user.role } return token }, async session({ session, token }) { if (session.user) { (session.user as any).role = token.role } return session }, }, pages: { signIn: "/admin/login", }, }) export { handler as GET, handler as POST }