frontend/lib/nextauth.ts

64 lines
1.8 KiB
TypeScript

import { PrismaAdapter } from "@auth/prisma-adapter"
import NextAuth, { NextAuthOptions, User } from "next-auth"
import Github from "next-auth/providers/github"
import prisma from "./prisma"
import { Adapter } from "next-auth/adapters"
export const authOptions: NextAuthOptions = {
providers: [
Github({
clientId: process.env.GITHUB_ID as string,
clientSecret: process.env.GITHUB_SECRET as string,
profile(profile, tokens) {
return {
id: profile.id,
name: profile.name,
email: profile.email,
image: profile.avatar_url,
username: profile.login,
} as User;
},
}),
],
adapter: PrismaAdapter(prisma) as Adapter,
pages: {
signIn: "/sign-in",
},
session: {
strategy: "jwt",
},
callbacks: {
session: ({ session, token }) => {
return {
...session,
user: {
...session.user,
id: token.id,
username: token.username,
},
};
},
jwt: ({ token, user }) => {
if (user) {
const u = user as unknown as any;
return {
...token,
id: u.id,
username: u.username,
};
}
return token;
},
},
events: {
createUser: async ({ user }) => {
await prisma.workspace.create({
data: {
name: user.username + "'s Personal",
ownerId: user.id,
slug: user.username.toLowerCase(),
},
});
}
},
}