51 lines
1.0 KiB
TypeScript
51 lines
1.0 KiB
TypeScript
import { db } from "@/lib/db/index";
|
|
import { DrizzleAdapter } from "@auth/drizzle-adapter";
|
|
import { DefaultSession, getServerSession, NextAuthOptions } from "next-auth";
|
|
import { Adapter } from "next-auth/adapters";
|
|
import { redirect } from "next/navigation";
|
|
import { env } from "@/lib/env.mjs"
|
|
|
|
|
|
declare module "next-auth" {
|
|
interface Session {
|
|
user: DefaultSession["user"] & {
|
|
id: string;
|
|
};
|
|
}
|
|
}
|
|
|
|
export type AuthSession = {
|
|
session: {
|
|
user: {
|
|
id: string;
|
|
name?: string;
|
|
email?: string;
|
|
};
|
|
} | null;
|
|
};
|
|
|
|
export const authOptions: NextAuthOptions = {
|
|
adapter: DrizzleAdapter(db) as Adapter,
|
|
callbacks: {
|
|
session: ({ session, user }) => {
|
|
session.user.id = user.id;
|
|
return session;
|
|
},
|
|
},
|
|
providers: [
|
|
|
|
],
|
|
};
|
|
|
|
|
|
export const getUserAuth = async () => {
|
|
const session = await getServerSession(authOptions);
|
|
return { session } as AuthSession;
|
|
};
|
|
|
|
export const checkAuth = async () => {
|
|
const { session } = await getUserAuth();
|
|
if (!session) redirect("/api/auth/signin");
|
|
};
|
|
|