tomodachi-share/backend/src/lib/auth.ts
Landon & Emma 4bdfefc1c6 Add dark mode
Fix #8
2026-04-22 13:16:54 -04:00

53 lines
1.6 KiB
TypeScript

import NextAuth from "next-auth";
import Discord from "next-auth/providers/discord";
import Github from "next-auth/providers/github";
import Google from "next-auth/providers/google";
import { PrismaAdapter } from "@auth/prisma-adapter";
import { prisma } from "@/lib/prisma";
export const { handlers, signIn, signOut, auth } = NextAuth({
adapter: PrismaAdapter(prisma),
providers: [Discord, Github({ issuer: "https://github.com/login/oauth" }), Google],
trustHost: true,
cookies: {
sessionToken: {
name: process.env.NODE_ENV === "production" ? "__Secure-next-auth.session-token" : "next-auth.session-token",
options: {
httpOnly: true,
sameSite: "none",
path: "/",
secure: true,
domain: process.env.NODE_ENV === "production" ? ".tomodachishare.com" : "localhost",
},
},
},
session: {
strategy: "database",
maxAge: 30 * 24 * 60 * 60,
},
callbacks: {
async signIn({ user }) {
const blacklist = process.env.BLACKLISTED_EMAILS ? process.env.BLACKLISTED_EMAILS.split(",").map((item) => item.trim().toLowerCase()) : [];
const email = user?.email?.toLowerCase();
if (!email) return false;
if (blacklist?.some((blocked) => email.endsWith(blocked))) return false;
return true;
},
async session({ session, user }) {
if (user) {
session.user.id = user.id;
session.user.email = user.email;
// @ts-expect-error - theme is added to User model
session.user.theme = user.theme;
}
return session;
},
async redirect({ url, baseUrl }) {
if (url.startsWith(baseUrl)) return url;
return process.env.NEXT_PUBLIC_FRONTEND_URL ?? "http://localhost:4321";
},
},
});