Whenever i complie it gives me 500 error and treid to debug and i see session and provider is undefined anyway to fix it?
// Route.js
import NextAuth from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';
import { connectToDB } from '@utils/database';
import User from '@models/user';
console.log("Google Client ID:", process.env.GOOGLE_ID);
console.log("Google Client Secret:", process.env.GOOGLE_CLIENT_SECRET);
export const handler = NextAuth({
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
})
],
async session({ session }) {
const sessionUser = await User.findOne({
email: session.user.email
})
session.user.id = sessionUser._id.toString();
return session;
},
async signIn({ profile }) {
try {
await connectToDB();
// Check if user already exists
const userExists = await User.findOne({ email: profile.email });
// If not, create a new document and save user in MongoDB
if (!userExists) {
await User.create({
email: profile.email,
username: profile.name.replace(" ", "").toLowerCase(),
image: profile.picture,
});
}
return true;
} catch (error) {
console.error('Error checking if user exists: ', error.message);
return false;
}
},
});
export { handler as GET, handler as POST };
//Nav.jsx
"use client";
import Link from "next/link";
import Image from "next/image";
import React from 'react';
import { useEffect, useState } from "react";
import { signIn, signOut, useSession, getProviders } from "next-auth/react";
const Nav = () => {
const { data: session } = useSession();
const [providers, setProviders] = useState(null);
const [toggleDropdown, setToggleDropdown] = useState(false);
useEffect(() => {
const setUpProviders = async () => {
const response = await getProviders();
console.log('Providers fetched:', response); // Debugging line
setProviders(response);
}
setUpProviders();
}, []);
useEffect(() => {
console.log('Session data:', session); // Debugging line
}, [session]);
return (
<nav className='flex-between w-full mb-16 pt-3'>
<Link href='/' className='flex gap-2 flex-center'>
<Image
src='/assets/images/logo.svg'
alt='logo'
width={30}
height={30}
className='object-contain'
/>
<p className='logo_text'>Promptopia</p>
</Link>
{/* Desktop Navigation */}
<div className='sm:flex hidden'>
{session?.user ? (
<div className='flex gap-3 md:gap-5'>
<Link href='/create-prompt' className='black_btn'>
Create Post
</Link>
<button type='button' onClick={signOut} className='outline_btn'>
Sign Out
</button>
<Link href='/profile'>
<Image
src={session?.user.image}
width={37}
height={37}
className='rounded-full'
alt='profile'
/>
</Link>
</div>
) : (
<>
{providers &&
Object.values(providers).map((provider) => (
<button
type='button'
key={provider.name}
onClick={() => signIn(provider.id)}
className='black_btn'
>
Sign in
</button>
))}
</>
)}
</div>
{/* Mobile Navigation */}
<div className='sm:hidden flex relative'>
{session?.user ? (
<div className='flex'>
<Image
src={session?.user.image}
width={37}
height={37}
className='rounded-full'
alt='profile'
onClick={() => setToggleDropdown((prev) => !prev)}
/>
{toggleDropdown && (
<div className='dropdown'>
<Link
href='/profile'
className='dropdown_link'
onClick={() => setToggleDropdown(false)}
>
My Profile
</Link>
<Link
href='/create-prompt'
className='dropdown_link'
onClick={() => setToggleDropdown(false)}
>
Create Prompt
</Link>
<button
type='button'
onClick={() => {
setToggleDropdown(false);
signOut();
}}
className='mt-5 w-full black_btn'
>
Sign Out
</button>
</div>
)}
</div>
) : (
<>
{providers &&
Object.values(providers).map((provider) => (
<button
type='button'
key={provider.name}
onClick={() => signIn(provider.id)}
className='black_btn'
>
Sign in
</button>
))}
</>
)}
</div>
</nav>
);
};
export default Nav;
Tried to debug and looked if .env was casugin but everthing seems fine with .env.
Here is my what i can see in my web console
enter image description here
Here is what i can see in my terminal
enter image description here