如何解决Next-Auth 返回“QueryFailedError:列 User.name 不存在”?
我有一个应用,前端有 NextJS/Apollo,后端有 Prisma/GraphQL,我的数据库有 Postgres。
我正在尝试将 Next-Auth 与自定义登录/注册页面结合起来,以允许用户选择通过电子邮件和密码或通过 Google/Facebook/Twitter 登录/注册。
尝试通过社交身份验证按钮之一登录时,我收到服务器错误:
[next-auth][error][oauth_callback_handler_error]
https://next-auth.js.org/errors#oauth_callback_handler_error QueryFailedError: column User.name does not exist
在我的数据库中,我有 first_name
和 last_name
列,因为我想分离出用户名(并且只有“名称”是糟糕的用户体验,imo)。
有没有办法修改我的 nextAuth 配置,以便我可以使用名字和姓氏?还是硬编码来查找“名称”列?
相关代码: [...nextAuth].js
import NextAuth from 'next-auth';
import Providers from 'next-auth/providers';
export default NextAuth({
providers: [
Providers.Google({
clientId: process.env.GOOGLE_CLIENT_ID,clientSecret: process.env.GOOGLE_CLIENT_SECRET,}),Providers.Facebook({
clientId: process.env.FACEBOOK_CLIENT_ID,clientSecret: process.env.FACEBOOK_CLIENT_SECRET,Providers.Twitter({
clientId: process.env.TWITTER_CLIENT_ID,clientSecret: process.env.TWITTER_CLIENT_SECRET,],pages: {
signIn: '/login',newUser: '/',signOut: '/login',},callbacks: {
async jwt(token,user,profile,isNewUser) {
console.log('*************** jwt callbacks');
console.log({ token });
console.log({ user });
console.log({ profile });
console.log({ isNewUser });
if (user) {
token.email = user.email;
token.password = user.password;
}
return token;
},async session(session,user) {
console.log('*************** session callback');
console.log({ session });
console.log({ user });
return session;
},async signIn(user,account,metadata) {
console.log('*************** signIn callback');
console.log({ user });
console.log({ account });
console.log({ metadata });
switch (account.provider) {
case 'facebook':
console.log('FACEBOOK');
break;
case 'google':
console.log('GOOGLE');
break;
case 'twitter':
console.log('TWITTER');
break;
default:
break;
}
},database: {
type: 'postgres',host: process.env.DATABASE_HOST,port: process.env.DATABASE_PORT,username: process.env.DATABASE_USERNAME,password: process.env.DATABASE_PASSWORD,database: process.env.DATABASE_NAME,session: {
jwt: true,jwt: {
secret: process.env.JWT_SECRET,encryption: true,encryptionKey: process.env.JWT_ENCRYPTION_KEY,debug: process.env.NODE_ENV === 'development',log: process.env.NODE_ENV === 'development',});
schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model Account {
id Int @id @default(autoincrement())
compoundId String @unique @map(name: "compound_id")
userId Int @map(name: "user_id")
providerType String @map(name: "provider_type")
providerId String @map(name: "provider_id")
providerAccountId String @map(name: "provider_account_id")
refreshToken String? @map(name: "refresh_token")
accessToken String? @map(name: "access_token")
accessTokenExpires DateTime? @map(name: "access_token_expires")
createdAt DateTime @default(now()) @map(name: "created_at")
updatedAt DateTime @default(now()) @map(name: "updated_at")
@@index([providerAccountId],name: "providerAccountId")
@@index([providerId],name: "providerId")
@@index([userId],name: "userId")
@@map(name: "accounts")
}
model User {
id Int @id @default(autoincrement())
firstName String?
lastName String?
password String
email String @unique
role Role @default(USER)
avatarUrl String?
address1 String?
address2 String?
city String?
state String?
country String?
hasOnboarded Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @default(now())
@@map("users")
}
model Session {
id Int @id @default(autoincrement())
userId Int @map(name: "user_id")
expires DateTime
sessionToken String @unique @map(name: "session_token")
accessToken String @unique @map(name: "access_token")
createdAt DateTime @default(now()) @map(name: "created_at")
updatedAt DateTime @default(now()) @map(name: "updated_at")
@@map(name: "sessions")
}
model VerificationRequest {
id Int @id @default(autoincrement())
identifier String
token String @unique
expires DateTime
createdAt DateTime @default(now()) @map(name: "created_at")
updatedAt DateTime @default(now()) @map(name: "updated_at")
@@map(name: "verification_requests")
}
enum Role {
USER
ADMIN
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。