mirror of
https://github.com/woodchen-ink/Q58Connect.git
synced 2025-07-18 05:51:55 +08:00
65 lines
1.6 KiB
TypeScript
65 lines
1.6 KiB
TypeScript
import { PrismaAdapter } from "@auth/prisma-adapter";
|
|
import NextAuth from "next-auth";
|
|
|
|
import authConfig from "./auth.config";
|
|
import { getUserById } from "./lib/dto/user";
|
|
import { prisma } from "./lib/prisma";
|
|
|
|
export const { handlers, auth, signIn, signOut } = NextAuth({
|
|
adapter: PrismaAdapter(prisma),
|
|
session: { strategy: "jwt" },
|
|
pages: {
|
|
signIn: "/sign-in",
|
|
},
|
|
callbacks: {
|
|
async session({ token, session }) {
|
|
if (!session.user) {
|
|
return session;
|
|
}
|
|
|
|
if (token.sub) {
|
|
session.user.id = token.sub;
|
|
}
|
|
if (token.username) {
|
|
session.user.username = token.username;
|
|
}
|
|
if (token.email) {
|
|
session.user.email = token.email;
|
|
}
|
|
if (token.picture) {
|
|
session.user.avatarUrl = token.picture;
|
|
}
|
|
if (token.role) {
|
|
session.user.role = token.role;
|
|
}
|
|
if (token.moderator !== undefined) {
|
|
session.user.moderator = token.moderator;
|
|
}
|
|
if (token.groups) {
|
|
session.user.groups = token.groups;
|
|
}
|
|
|
|
session.user.name = token.name;
|
|
return session;
|
|
},
|
|
async jwt({ token }) {
|
|
if (!token.sub) return token;
|
|
|
|
const dbUser = await getUserById(token.sub);
|
|
if (!dbUser) return token;
|
|
|
|
token.username = dbUser.username;
|
|
token.email = dbUser.email;
|
|
token.picture = dbUser.avatarUrl;
|
|
token.name = dbUser.name;
|
|
token.role = dbUser.role;
|
|
token.moderator = dbUser.moderator;
|
|
token.groups = dbUser.groups;
|
|
|
|
return token;
|
|
},
|
|
},
|
|
...authConfig,
|
|
debug: process.env.NODE_ENV !== "production",
|
|
});
|