Nextauth google login not creating registers

Hey, I am having an issue with the Google login/signup on nextauth, the GoogleProvider is not creating the register in my database somehow and I don't know what is happening, the user can login and I recieve the sessionData but there is no new register in the databse when using google credentials. Has anyone had this before? I am using a T3 app so I should have everything setup right?
6 Replies
JacobMGEvans
JacobMGEvans14mo ago
I would provide some of your config, and implementation code if possible.
baury
baury14mo ago
Sure, thisis my server/auth.ts file
import { type GetServerSidePropsContext } from "next";
import {
getServerSession,
type NextAuthOptions,
type DefaultSession,
} from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import CredentialsProvider from "next-auth/providers/credentials";
import { env } from "~/env.mjs";
import { prisma } from "~/server/db";
import bcrypt from "bcrypt";

declare module "next-auth" {
interface Session extends DefaultSession {
user: {
id: string;
cantPuertas: number;
// ...other properties
// role: UserRole;
} & DefaultSession["user"];
}

// interface User {
// // ...other properties
// // role: UserRole;
// }
}

export const authOptions: NextAuthOptions = {
providers: [
GoogleProvider({
clientId: env.GOOGLE_CLIENT_ID,
clientSecret: env.GOOGLE_CLIENT_SECRET
}),
CredentialsProvider({
name: "credentials",
credentials: {},
async authorize(credentials) {
//Credentials login
}
})
],
pages: {
signIn: "/signUp",
},
session: {
strategy: "jwt",
},
secret: env.JWT_SECRET,
callbacks: {
session: ({ session, token }) => {
console.log(token)
if (session.user && token.sub) {
session.user.id = token.sub;
}
return session;
},
},
};
import { type GetServerSidePropsContext } from "next";
import {
getServerSession,
type NextAuthOptions,
type DefaultSession,
} from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import CredentialsProvider from "next-auth/providers/credentials";
import { env } from "~/env.mjs";
import { prisma } from "~/server/db";
import bcrypt from "bcrypt";

declare module "next-auth" {
interface Session extends DefaultSession {
user: {
id: string;
cantPuertas: number;
// ...other properties
// role: UserRole;
} & DefaultSession["user"];
}

// interface User {
// // ...other properties
// // role: UserRole;
// }
}

export const authOptions: NextAuthOptions = {
providers: [
GoogleProvider({
clientId: env.GOOGLE_CLIENT_ID,
clientSecret: env.GOOGLE_CLIENT_SECRET
}),
CredentialsProvider({
name: "credentials",
credentials: {},
async authorize(credentials) {
//Credentials login
}
})
],
pages: {
signIn: "/signUp",
},
session: {
strategy: "jwt",
},
secret: env.JWT_SECRET,
callbacks: {
session: ({ session, token }) => {
console.log(token)
if (session.user && token.sub) {
session.user.id = token.sub;
}
return session;
},
},
};
Apex
Apex14mo ago
@auth/prisma-adapter | Auth.js
Official Prisma adapter for Auth.js / NextAuth.js.
baury
baury14mo ago
and my scgema.prisma
Apex
Apex14mo ago
this should help you
baury
baury14mo ago
model Account { id String @id @default(cuid()) userId String type String provider String providerAccountId String refresh_token String? @db.Text access_token String? @db.Text expires_at Int? token_type String? scope String? id_token String? @db.Text session_state String? user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([provider, providerAccountId]) @@index([userId]) } model Session { id String @id @default(cuid()) sessionToken String @unique userId String expires DateTime user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@index([userId]) } model User { id String @id @default(cuid()) name String? email String? @unique emailVerified DateTime? image String? password String? accounts Account[] sessions Session[] printers Printer[] worksAsClient Work[] @relation("ClientRelation") worksAsWorker Work[] @relation("WorkerRelation") } model VerificationToken { identifier String token String @unique expires DateTime @@unique([identifier, token]) } I get an type error when trying to add the prismaAdapter, otherwise it is the same that I have The google provider should create user registers in my database by itself right? Solved it, thank you so much @shreyashrangrej it actually helped a lot If anyone in the future needs it:
import { type GetServerSidePropsContext } from "next";
import {
getServerSession,
type NextAuthOptions,
type DefaultSession,
} from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import CredentialsProvider from "next-auth/providers/credentials";
import { env } from "~/env.mjs";
import { prisma } from "~/server/db";
import bcrypt from "bcrypt";
import { PrismaAdapter } from "@auth/prisma-adapter";
import { DefaultAdapter } from "next-auth/adapters";

declare module "next-auth" {
interface Session extends DefaultSession {
user: {
id: string;
cantPuertas: number;
// ...other properties
// role: UserRole;
} & DefaultSession["user"];
}

// interface User {
// // ...other properties
// // role: UserRole;
// }
}

export const authOptions: NextAuthOptions = {
adapter: PrismaAdapter(prisma) as DefaultAdapter,
providers: [
GoogleProvider({
clientId: env.GOOGLE_CLIENT_ID,
clientSecret: env.GOOGLE_CLIENT_SECRET
}),
CredentialsProvider({
name: "credentials",
credentials: {},
async authorize(credentials) {
//Logic
}
})
],
pages: {
signIn: "/signUp",
},
session: {
strategy: "jwt",
},
secret: env.JWT_SECRET,
callbacks: {
session: ({ session, token }) => {
console.log(token)
if (session.user && token.sub) {
session.user.id = token.sub;
}
return session;
},
},
};

export const getServerAuthSession = (ctx: {
req: GetServerSidePropsContext["req"];
res: GetServerSidePropsContext["res"];
}) => {
return getServerSession(ctx.req, ctx.res, authOptions);
};
import { type GetServerSidePropsContext } from "next";
import {
getServerSession,
type NextAuthOptions,
type DefaultSession,
} from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import CredentialsProvider from "next-auth/providers/credentials";
import { env } from "~/env.mjs";
import { prisma } from "~/server/db";
import bcrypt from "bcrypt";
import { PrismaAdapter } from "@auth/prisma-adapter";
import { DefaultAdapter } from "next-auth/adapters";

declare module "next-auth" {
interface Session extends DefaultSession {
user: {
id: string;
cantPuertas: number;
// ...other properties
// role: UserRole;
} & DefaultSession["user"];
}

// interface User {
// // ...other properties
// // role: UserRole;
// }
}

export const authOptions: NextAuthOptions = {
adapter: PrismaAdapter(prisma) as DefaultAdapter,
providers: [
GoogleProvider({
clientId: env.GOOGLE_CLIENT_ID,
clientSecret: env.GOOGLE_CLIENT_SECRET
}),
CredentialsProvider({
name: "credentials",
credentials: {},
async authorize(credentials) {
//Logic
}
})
],
pages: {
signIn: "/signUp",
},
session: {
strategy: "jwt",
},
secret: env.JWT_SECRET,
callbacks: {
session: ({ session, token }) => {
console.log(token)
if (session.user && token.sub) {
session.user.id = token.sub;
}
return session;
},
},
};

export const getServerAuthSession = (ctx: {
req: GetServerSidePropsContext["req"];
res: GetServerSidePropsContext["res"];
}) => {
return getServerSession(ctx.req, ctx.res, authOptions);
};
Want results from more Discord servers?
Add your server