57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
import NextAuth from "next-auth";
|
|
import { authOptions } from "@/lib/auth";
|
|
|
|
const handler = NextAuth({
|
|
...authOptions,
|
|
debug: true, // Enable debug logging
|
|
callbacks: {
|
|
...authOptions.callbacks,
|
|
async redirect({ url, baseUrl }) {
|
|
console.log('Redirect callback:', { url, baseUrl });
|
|
// Allows relative callback URLs
|
|
if (url.startsWith("/")) return `${baseUrl}${url}`;
|
|
// Allows callback URLs on the same origin
|
|
else if (new URL(url).origin === baseUrl) return url;
|
|
return baseUrl;
|
|
},
|
|
async session({ session, token }) {
|
|
console.log('Session callback:', {
|
|
sessionBefore: session,
|
|
token: { ...token, refreshToken: '[REDACTED]' }
|
|
});
|
|
|
|
if (token.error) {
|
|
console.error('Token error:', token.error);
|
|
throw new Error('RefreshAccessTokenError');
|
|
}
|
|
|
|
session.user.id = token.id;
|
|
session.user.email = token.email;
|
|
session.user.name = token.name;
|
|
session.user.role = token.role;
|
|
|
|
console.log('Session after:', {
|
|
sessionAfter: { ...session, user: { ...session.user, id: '[REDACTED]' } }
|
|
});
|
|
|
|
return session;
|
|
},
|
|
},
|
|
});
|
|
|
|
export { handler as GET, handler as POST };
|
|
|
|
interface JWT {
|
|
accessToken: string;
|
|
refreshToken: string;
|
|
accessTokenExpires: number;
|
|
}
|
|
|
|
interface Profile {
|
|
sub?: string;
|
|
email?: string;
|
|
name?: string;
|
|
roles?: string[];
|
|
}
|
|
|