optimize auth

This commit is contained in:
sijinhui 2024-04-29 08:48:30 +08:00
parent 35e7f12d88
commit b5e41896bf

View File

@ -9,6 +9,7 @@ import {ADMIN_LIST, isEmail, isName} from "@/lib/auth_list";
import {createTransport} from "nodemailer"; import {createTransport} from "nodemailer";
import { comparePassword, hashPassword } from "@/lib/utils"; import { comparePassword, hashPassword } from "@/lib/utils";
const SECURE_COOKIES:boolean = !!process.env.SECURE_COOKIES; const SECURE_COOKIES:boolean = !!process.env.SECURE_COOKIES;
type PartialUser = Partial<User>;
export const authOptions: NextAuthOptions = { export const authOptions: NextAuthOptions = {
@ -87,7 +88,7 @@ export const authOptions: NextAuthOptions = {
// 判断姓名格式是否符合要求,不符合则拒绝 // 判断姓名格式是否符合要求,不符合则拒绝
if (username && isName(username)) { if (username && isName(username)) {
// Any object returned will be saved in `user` property of the JWT // Any object returned will be saved in `user` property of the JWT
let user:{[key: string]: string} = {} let user: PartialUser = {}
if (isEmail(username)) { if (isEmail(username)) {
user['email'] = username; user['email'] = username;
} else { } else {
@ -96,13 +97,8 @@ export const authOptions: NextAuthOptions = {
// 目前用户不存在,则会创建新用户。 // 目前用户不存在,则会创建新用户。
let existingUser = await existUser(user); // await insertUser(user) let existingUser = await existUser(user); // await insertUser(user)
if (!existingUser) { if (!existingUser) {
if (await getSetting("allowNewUser")) { user['allowToLogin'] = !!await getSetting("allowNewUser");
// 如果不存在,则创建 existingUser = await insertUser(user);
existingUser = await insertUser(user);
} else {
// 如果不存在,则报错
throw new Error("未知用户")
}
} }
// 有密码就校验密码,没有就直接返回用户 // 有密码就校验密码,没有就直接返回用户
(password || existingUser.password) && validatePassword(password, existingUser.password); (password || existingUser.password) && validatePassword(password, existingUser.password);
@ -235,7 +231,7 @@ async function getSetting(key: string) {
} }
} }
async function existUser(user: {[key: string]: string} | User ) { async function existUser(user: PartialUser ) {
const conditions = []; const conditions = [];
if (user?.name) { if (user?.name) {
conditions.push({ name: user.name }); conditions.push({ name: user.name });
@ -250,7 +246,8 @@ async function existUser(user: {[key: string]: string} | User ) {
}) : null }) : null
} }
export async function insertUser(user: {[key: string]: string}) { export async function insertUser(user: PartialUser ) {
console.log('------------', user)
try { try {
return await prisma.user.create({ return await prisma.user.create({
data: user data: user