#Can you post some relevant code
1 messages · Page 1 of 1 (latest)
[...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")
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.