#Can you post some relevant code

1 messages · Page 1 of 1 (latest)

glossy peak
#

[...nextauth].ts

import NextAuth, { Account, NextAuthOptions, Session } from "next-auth";
import AzureADProvider from "next-auth/providers/azure-ad";
import GithubProvider from "next-auth/providers/github";
import LinkedInProvider from "next-auth/providers/linkedin";
import GoogleProvider from "next-auth/providers/google";
import { connectToDatabase } from "@/lib/middleware/mongo";
import config from "@/config/next-auth.config";
// import { User } from "next-auth";
import { JWT } from "next-auth/jwt";
import { User } from "@/types/next-auth";

export const authOptions: NextAuthOptions = {
  providers: [
    LinkedInProvider({
      clientId: process.env.LinkedIn_ID!,
      clientSecret: process.env.LinkedIn_SECRET!,
    }),
  ],
  ...config,
  callbacks: {
    async jwt(params: {
      token: JWT;
      user: User | undefined;
      account: Account;
    }) {
      const { token, user, account } = params;
      const isSignIn = user ? true : false;
      const db = await connectToDatabase();
      const usersCollection = db.collection("users");
      if (isSignIn) {
        console.log("user", user);

        // token.password = user.password;
        token.image = user?.image;
        token.uid = user?.email;
        let dbUser = await usersCollection.findOne({
          uid: token.uid,
        });
        if (!dbUser) {
          const newUser = {
            uid: token.uid,
            username: token.username,
            unspent_token: 100000,
          };

          const result = await usersCollection.insertOne(newUser);
          dbUser = { ...newUser, _id: result.insertedId };
        }
        token.unspent_token = dbUser?.unspent_token;
      } else {
        let dbUser = await usersCollection.findOne({
          uid: token.uid,
        });
        token.unspent_token = dbUser?.unspent_token;
      }
      return token;
    },
...
#
...
 async session({
      session,
      token,
    }: {
      session: Session;
      token: JWT;
    }): Promise<Session> {
      const db = await connectToDatabase();
      const usersCollection = db.collection("users");
      const dbUser = await usersCollection.findOne({
        uid: token.email,
      });

      return {
        ...session,
        user: {
          ...session.user,
          unspent_token: dbUser?.unspent_token,
        },
      };
    },
  },
};

export default NextAuth(authOptions);
#

than in layout.tsx

export default async function RootLayout({
  children,
  params,
}: {
  children: React.ReactNode;
  params: { lang: Locale };
}) {
  const session = await getServerSession(authOptions);
  console.log(session, ":= session")
light lotus
#

I could be wrong, but it looks like in your session callback, you aren't actually assigning any values to the session. Here is my session callback for example:

async session({ token, session }) {
            if (token && session?.user) {
                session.user.id = token.id;
                session.user.name = token.name;
                session.user.email = token.email;
                session.user.image = token.picture;
            }

            return session;
        },

I'm populating the session object with values retrieved from the jwt and then returning the session.