Spaces:
Running
Running
| import NextAuth, { type DefaultSession } from 'next-auth'; | |
| import GitHub from 'next-auth/providers/github'; | |
| import Google from 'next-auth/providers/google'; | |
| declare module 'next-auth' { | |
| interface Session { | |
| user: { | |
| /** The user's id. */ | |
| id: string; | |
| } & DefaultSession['user']; | |
| } | |
| } | |
| export const { | |
| handlers: { GET, POST }, | |
| auth, | |
| } = NextAuth({ | |
| providers: [ | |
| GitHub, | |
| Google({ | |
| clientId: process.env.GOOGLE_CLIENT_ID!, | |
| clientSecret: process.env.GOOGLE_SECRET!, | |
| }), | |
| ], | |
| callbacks: { | |
| signIn({ profile }) { | |
| if (profile?.email?.endsWith('@landing.ai')) { | |
| return !!profile; | |
| } else { | |
| return '/unauthorized'; | |
| } | |
| }, | |
| jwt({ token, profile }) { | |
| if (profile) { | |
| token.id = profile.id || profile.sub; | |
| token.image = profile.avatar_url || profile.picture; | |
| } | |
| return token; | |
| }, | |
| session: ({ session, token }) => { | |
| if (session?.user && token?.id) { | |
| session.user.id = String(token.id); | |
| } | |
| return session; | |
| }, | |
| authorized({ request, auth }) { | |
| return !!auth?.user || request.nextUrl.pathname === '/unauthorized'; // this ensures there is a logged in user for -every- request | |
| }, | |
| }, | |
| pages: { | |
| signIn: '/sign-in', // overrides the next-auth default signin page https://authjs.dev/guides/basics/pages | |
| }, | |
| }); | |