diff --git a/.github/workflows/publish-to-laconic.yml b/.github/workflows/publish-to-laconic.yml index f6c017e..e54e15d 100644 --- a/.github/workflows/publish-to-laconic.yml +++ b/.github/workflows/publish-to-laconic.yml @@ -20,6 +20,9 @@ env: PINATA_JWT: ${{ secrets.PINATA_JWT }} GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + # Environment + NODE_ENV: production + # Authentication NEXTAUTH_URL: ${{ secrets.NEXTAUTH_URL }} NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET }} diff --git a/scripts/deploy-frontend.sh b/scripts/deploy-frontend.sh index 5b884b6..0cd9822 100755 --- a/scripts/deploy-frontend.sh +++ b/scripts/deploy-frontend.sh @@ -90,8 +90,16 @@ echo "PINATA_JWT=$PINATA_JWT" >> .env.example echo "PINATA_BASE_URL=$PINATA_BASE_URL" >> .env.example echo "GOOGLE_API_KEY=$GOOGLE_API_KEY" >> .env.example +# Environment +echo "NODE_ENV=production" >> .env.example + # Authentication -echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env.example +# If NEXTAUTH_URL is not set, use the deployment hostname +if [ -z "$NEXTAUTH_URL" ]; then + echo "NEXTAUTH_URL=https://$REGISTRY_DEPLOYMENT_HOSTNAME" >> .env.example +else + echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env.example +fi echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env.example # OAuth Providers diff --git a/src/app/api/auth/[...nextauth]/route.ts b/src/app/api/auth/[...nextauth]/route.ts index fb7eb92..22f1e28 100644 --- a/src/app/api/auth/[...nextauth]/route.ts +++ b/src/app/api/auth/[...nextauth]/route.ts @@ -1,6 +1,21 @@ import NextAuth from "next-auth"; import GoogleProvider from "next-auth/providers/google"; +// Check for required environment variables and environment +console.log("Next-Auth initializing with NODE_ENV:", process.env.NODE_ENV); + +if (!process.env.NEXTAUTH_SECRET) { + console.error("Error: NEXTAUTH_SECRET environment variable is missing"); +} + +if (!process.env.GOOGLE_CLIENT_ID || !process.env.GOOGLE_CLIENT_SECRET) { + console.error("Error: Google OAuth credentials are missing"); +} + +if (!process.env.NEXTAUTH_URL) { + console.log("Warning: NEXTAUTH_URL not explicitly set, will use default"); +} + // Define auth options const authOptions = { providers: [ @@ -23,6 +38,22 @@ const authOptions = { return session; }, }, + secret: process.env.NEXTAUTH_SECRET, + // Ensure cookies work in production + cookies: { + sessionToken: { + name: process.env.NODE_ENV === 'production' + ? '__Secure-next-auth.session-token' + : 'next-auth.session-token', + options: { + httpOnly: true, + sameSite: "lax" as const, + path: '/', + secure: process.env.NODE_ENV === 'production' + } + } + }, + debug: process.env.NODE_ENV !== 'production', }; // Create a handler with the auth options diff --git a/src/app/debug/page.tsx b/src/app/debug/page.tsx index dbc466e..07ef188 100644 --- a/src/app/debug/page.tsx +++ b/src/app/debug/page.tsx @@ -22,6 +22,21 @@ export default function DebugPage() { checkAuth(); }, []); + + // Environment variables check (public variables only) + const envCheck = { + NODE_ENV: process.env.NODE_ENV, + IS_PRODUCTION: process.env.NODE_ENV === 'production', + RUNTIME_ENV: typeof window !== 'undefined' ? 'client' : 'server', + NEXT_PUBLIC_APP_TITLE: process.env.NEXT_PUBLIC_APP_TITLE, + NEXT_PUBLIC_THEME: process.env.NEXT_PUBLIC_THEME, + HAS_NEXTAUTH_URL: !!process.env.NEXTAUTH_URL, + HAS_NEXTAUTH_SECRET: !!process.env.NEXTAUTH_SECRET, + HAS_GOOGLE_CLIENT_ID: !!process.env.GOOGLE_CLIENT_ID, + HAS_GOOGLE_CLIENT_SECRET: !!process.env.GOOGLE_CLIENT_SECRET, + NEXTAUTH_URL_DOMAIN: process.env.NEXTAUTH_URL ? new URL(process.env.NEXTAUTH_URL).hostname : null, + WINDOW_LOCATION: typeof window !== 'undefined' ? window.location.hostname : null, + }; return (
+ {JSON.stringify(envCheck, null, 2)}
+
+