feat: 首次登录引导与注册修复
This commit is contained in:
24
src/auth.ts
24
src/auth.ts
@@ -49,13 +49,37 @@ export const { handlers, auth, signIn, signOut } = NextAuth({
|
||||
if (user) {
|
||||
token.id = (user as { id: string }).id
|
||||
token.role = (user as { role?: string }).role ?? "student"
|
||||
token.name = (user as { name?: string }).name
|
||||
}
|
||||
|
||||
const userId = String(token.id ?? "").trim()
|
||||
if (userId) {
|
||||
const [{ eq }, { db }, { users }] = await Promise.all([
|
||||
import("drizzle-orm"),
|
||||
import("@/shared/db"),
|
||||
import("@/shared/db/schema"),
|
||||
])
|
||||
|
||||
const fresh = await db.query.users.findFirst({
|
||||
where: eq(users.id, userId),
|
||||
columns: { role: true, name: true },
|
||||
})
|
||||
|
||||
if (fresh) {
|
||||
token.role = fresh.role ?? token.role ?? "student"
|
||||
token.name = fresh.name ?? token.name
|
||||
}
|
||||
}
|
||||
|
||||
return token
|
||||
},
|
||||
session: async ({ session, token }) => {
|
||||
if (session.user) {
|
||||
session.user.id = String(token.id ?? "")
|
||||
session.user.role = String(token.role ?? "student")
|
||||
if (typeof token.name === "string") {
|
||||
session.user.name = token.name
|
||||
}
|
||||
}
|
||||
return session
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user