Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import authConfig from "@/auth.config"
- import { PrismaAdapter } from "@auth/prisma-adapter"
- import { UserRole } from "@prisma/client"
- import NextAuth from "next-auth"
- import { getUserById } from "@/lib/api/services/user"
- import db from "@/lib/db"
- export const {
- handlers: { GET, POST },
- auth,
- signIn,
- signOut,
- unstable_update,
- } = NextAuth({
- pages: {
- signIn: "/login",
- },
- events: {
- async linkAccount({ user }) {
- await db.user.update({
- where: { id: user.id },
- data: { emailVerified: new Date() },
- })
- },
- },
- callbacks: {
- async signIn({ user, account }) {
- // Allow OAuth without email verification
- if (account?.provider !== "credentials") return true
- if (!user.id) return false
- const existingUser = await getUserById(user.id)
- // Prevent sign in without email verification
- if (!existingUser?.emailVerified) return false
- return true
- },
- async session({ token, session }) {
- if (token.sub && session.user) {
- session.user.id = token.sub
- }
- if (token.role && session.user) {
- session.user.role = token.role as UserRole
- }
- if (session.user) {
- session.user.name = token.name
- if (token.email) session.user.email = token.email
- }
- return session
- },
- async jwt({ token }) {
- if (!token.sub) return token
- const existingUser = await getUserById(token.sub)
- if (!existingUser) return token
- token.name = existingUser.name
- token.email = existingUser.email
- token.role = existingUser.role
- return token
- },
- },
- adapter: PrismaAdapter(db),
- session: {
- strategy: "jwt",
- },
- ...authConfig,
- })
Add Comment
Please, Sign In to add comment