Search code examples
typescriptnext.jsprismanext-autht3

Profile id is missing in Google OAuth profile response - NextAuth


I'm following this tutorial on how to add roles in next-auth session. Unfortunately, when I add profile property, I get undefined behavior of the profile missing. There are also errors regarding typescript. Is this an error on my side, or is it a known bug, since I couldn't find anything on it.

Here's my code so far:

export const authOptions: AuthOptions = {
  secret: process.env.NEXT_PUBLIC_SECRET!,
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID!,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
      // profile: async (profile) => {
      //   return { ...profile, role: profile.role ?? Role.USER };
      // },
    }),
  ],
  pages: {
    signIn: "/",
  },

  adapter: PrismaAdapter(prisma),
};

as you can see it's the same as the one from the tutorial, when I comment out the profile section I get the expected behavior without role. Any help would be appreciated!

Version of Next.js: 13.4.1 (app directory)


Solution

  • I just added "id: profile.sub" to my GoogleProvider and I have no error since that

    GoogleProvider({
                clientId: process.env.GOOGLE_ID,
                clientSecret: process.env.GOOGLE_SECRET,
                authorization: {
                    params: {
                        prompt: "consent",
                        access_type: "offline",
                        response_type: "code"
                    }
                },
                async profile(profile) {
    
                    return {
                        id: profile.sub,
                        name: profile.name,
                        firstname: profile.given_name,
                        lastname: profile.family_name,
                        email: profile.email,
                        image: profile.picture,
                    }
                },
            }),