Next.js Discord

Discord Forum

Next auth ( Azure ) : Id not showing up until I reload or click

Unanswered
hiro posted this in #help-forum
Open in Discord
"use client";
import { useSession, signIn, signOut } from "next-auth/react";
import {router} from "next/client";

export default function HomePage() {
    const { data: session } = useSession()
    if (session) router.reload()

    if (!session) {
        return (
            <div>
                <button onClick={() => signIn("azure-ad")}>Sign in with Azure AD</button>
            </div>
        );
    }

    return (
        <div>
            <h1>Welcome, {session.user?.displayName || "Guest"}</h1>
            <p>Email: {session.user?.email}</p>
            {/* Check if 'id' is available before rendering */}
            <p>ID: {session.user?.id ? session.user.id : "No ID available"}</p>
            <button onClick={() => signOut()}>Sign out</button>
        </div>
    );
}


import NextAuth, { AuthOptions } from "next-auth"
import AzureADProvider from "next-auth/providers/azure-ad"
import { JWT } from "next-auth/jwt"
import { Account, Profile, Session } from "next-auth"
import {cookies} from "next/headers";

export const authOptions: AuthOptions = {
    providers: [
        AzureADProvider({
            clientId: process.env.AZURE_AD_CLIENT_ID as string,
            clientSecret: process.env.AZURE_AD_CLIENT_SECRET as string,
            tenantId: process.env.AZURE_AD_TENANT_ID as string,
            authorization: {
                url: `https://login.microsoftonline.com/${process.env.AZURE_AD_TENANT_ID}/oauth2/v2.0/authorize`,
                params: {
                    scope: "openid profile email offline_access",
                    response_type: "code",
                    response_mode: "query",
                    prompt: "select_account",
                },
            },
            allowDangerousEmailAccountLinking: true,
        }),
    ],

    callbacks: {
        async jwt({ token, account, profile }) {
            // Add profile data to the token on initial sign-in
            if (account && profile) {
                token.id = profile.sub;
                token.displayName = profile.name;
                token.email = profile.email;
                token.image = profile.image;
            }
            return token;
        },
        async session({ session, token }) {
            // Add custom properties to the session object
            session.user.id = token.id as string;
            session.user.displayName = token.displayName as string;
            session.user.email = token.email as string;
            session.user.image = token.image as string;
            return session;
        },
    },

    session: {
        strategy: "jwt",
    },

    pages: {
        signIn: '/auth/login',
        signOut: '/auth/logout',
        error: '/auth/error',
    },

    secret: process.env.NEXT_AUTH_SECRET,
}

export default NextAuth(authOptions)

2 Replies

It's really weird when I click on chrome on taskbar it appears, I reload it disappears again
^^