auth 에러에 대해서
제목: auth 해보고 있는데 오류가 나오고있네용
설명: 저는 prisma를 postgresql로 하고있습니다.
그래도 왜 이런 오류가 나오는지 원인은 잘 모르겠네요
내용: auth에서 credentials를 하고 있습니다.
import NextAuth from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";
import KakaoProvider from "next-auth/providers/kakao";
import NaverProvider from "next-auth/providers/naver";
import { PrismaAdapter } from "@auth/prisma-adapter";
import prisma from "@root/src/server/prisma";
import bcrypt from "bcrypt";
export const authOptions = {
providers: [
CredentialsProvider({
name: "Credentials",
credentials: {
accountId: { label: "Username", type: "text" },
password: { label: "Password", type: "password" },
email: { label: "Email", type: "email" },
name: { label: "Name", type: "text" },
},
async authorize(credentials, req) {
if (!credentials?.email || !credentials.password) {
return null;
}
const exUser = prisma.user.findUnique({
where: {
accountId: credentials.accountId as string,
email: credentials.email as string,
password: credentials.password,
name: credentials.name as string,
},
});
if (!exUser) return null;
const passwordMatch = await bcrypt.compare(
credentials.password as string,
exUser.password! // 오류 발생
);
return passwordMatch ? exUser : null;
},
}),
KakaoProvider({
clientId: process.env.KAKAO_CLIENT_ID!,
clientSecret: process.env.KAKAO_CLIENT_SECRET!,
}),
NaverProvider({
clientId: process.env.NAVER_CLIENT_ID!,
clientSecret: process.env.NAVER_CLIENT_SECRET!,
}),
],
adapter: PrismaAdapter(prisma),
};
const handler = NextAuth(authOptions); // authOptions 오류 발생
export { handler as GET, handler as POST };
이건 제 소스이고,
authOptions와 exUser.password! 부분에서 에러가 나오고 있는데 원인을 잘 모르겠습니다.
해당 오류입니다.
'Prisma__UserClient<{ id: string; accountId: string | null; name: string | null; email: string | null; emailVerified: Date | null; image: string | null; phone: string; password: string; role: ROLE; } | null, null, DefaultArgs>' 형식에 'password' 속성이 없습니다.ts(2339)
아래는 authOptions 오류입니다.
'{ providers: (CredentialsConfig<Record<string, CredentialInput>> | OAuthConfig<KakaoProfile> | OAuthConfig<...>)[]; adapter: Adapter; }' 형식의 인수는 'NextAuthConfig' 형식의 매개 변수에 할당될 수 없습니다.
'adapter.linkAccount'의 형식은 해당 형식 간에 호환되지 않습니다.
'((account: import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/@auth/core/adapters").AdapterAccount) => Promise<void> | import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/@auth/core/types").Awaitable<import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/@aut...' 형식은 '((account: import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/next-auth/node_modules/@auth/core/adapters").AdapterAccount) => Promise<void> | import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/next-auth/node_modules/@auth/core/types").Awaitable<...>) | undefined' 형식에 할당할 수 없습니다.
'(account: import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/@auth/core/adapters").AdapterAccount) => Promise<void> | import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/@auth/core/types").Awaitable<import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/@auth...' 형식은 '(account: import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/next-auth/node_modules/@auth/core/adapters").AdapterAccount) => Promise<void> | import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/next-auth/node_modules/@auth/core/types").Awaitable<...>' 형식에 할당할 수 없습니다.
'Promise<void> | import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/@auth/core/types").Awaitable<import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/@auth/core/adapters").AdapterAccount | null | undefined>' 형식은 'Promise<void> | import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/next-auth/node_modules/@auth/core/types").Awaitable<import("/Users/hwangjeong-yeon/workspace/Project/FOCC/focc/node_modules/next-auth/node_modules/@auth/core/adapters").AdapterAccount | null | undefined>' 형식에 할당할 수 없습니다.
'AdapterAccount' 형식은 'Promise<void> | Awaitable<AdapterAccount | null | undefined>' 형식에 할당할 수 없습니다.
'AdapterAccount' 형식에 'Promise<void>' 형식의 then, catch, finally, [Symbol.toStringTag] 속성이 없습니다.ts(2345)
const authOptions: {
providers: (CredentialsConfig<Record<string, CredentialInput>> | OAuthConfig<KakaoProfile> | OAuthConfig<...>)[];
adapter: Adapter;
}
혹시 제가 schema 부분에서 오류가 있을까요?
model User {
id String @id @default(cuid())
accountId String?
name String?
email String? @unique
emailVerified DateTime?
image String?
phone String @default("")
password String @default("")
role ROLE @default(USER)
accounts Account[]
sessions Session[]
답변 2
1
안녕하세요 정연님 질문 주셔서 감사합니다! 실례지만 전체 소스코드가 있어야 확실하게 답변해 드릴 수 있을 것 같습니다.
우선 제출해주신 코드를 분석하자면 다음과 같습니다:
1. exUser.password! 오류:
- 오류 메시지에 따르면, 'Prisma__UserClient<...>' 형식에 'password' 속성이 없습니다.라고 나타나고 있습니다. 이는 prisma.user.findUnique({...}) 호출이 반환하는 객체에 password 속성이 없다는 것을 의미합니다.
- Prisma의 findUnique 메소드는 기본적으로 모든 필드를 가져오지 않습니다. 특정 필드를 명시적으로 선택해야 합니다. select나 include 옵션을 사용하여 password 필드를 가져오도록 수정해야 합니다.
- 예를 들어:
const exUser = await prisma.user.findUnique({
where: {
accountId: credentials.accountId as string,
// 다른 조건들...
},
select: {
password: true,
// 다른 필요한 필드들...
}
});
2. authOptions 오류:
- 오류 메시지는 authOptions 객체가 'NextAuthConfig' 형식의 매개변수에 할당될 수 없다고 나타내고 있습니다. 이는 NextAuth와 PrismaAdapter 간의 호환성 문제로 보입니다.
- 이 문제는 종종 버전 차이 또는 잘못된 타입 정의로 인해 발생할 수 있습니다. 사용 중인 next-auth와 @auth/prisma-adapter의 버전이 호환되는지 확인하세요.
- 필요한 경우, 라이브러리의 최신 버전으로 업데이트하거나, 호환되는 버전 조합을 찾아야 합니다.
- 또한, PrismaAdapter(prisma) 호출이 올바르게 adapter 필드에 할당되고 있는지 확인하세요.
3. Prisma 스키마:
- Prisma 스키마에는 password 필드가 정의되어 있으며, 기본값이 설정되어 있습니다 (`@default("")`). 이는 비밀번호 필드가 항상 존재함을 의미합니다.
- accountId, email, name 필드는 선택적(`?`)으로 정의되어 있으며, 이는 해당 필드가 null일 수도 있음을 의미합니다.
- findUnique 쿼리에서 이러한 필드들을 올바르게 사용하고 있는지 확인하세요. 선택적 필드는 null일 수 있으므로, 쿼리 조건에서 이를 고려해야 합니다.
이러한 수정을 통해 오류를 해결할 수 있을 것입니다. 오류 메시지를 꼼꼼히 읽고, 필요한 필드가 쿼리에 포함되어 있는지, 사용하는 라이브러리의 버전이 호환되는지 확인하는 것이 중요합니다. 참고해주세요!!
CRA ? 질문입니다
0
14
1
강의 커리큘럼 관련 질문입니다.
0
31
0
onSettled 질문드립니다.
0
52
2
스크립트 영상 미일치
0
64
3
테마분류 세부화 관련 질의
0
43
2
강의 설명 중에 헷갈리는 것이 있네요
0
45
1
음성불량
0
44
1
generateStaticParams() 응용 질문 드립니다.
0
64
2
카카오톡 sdk 로그인
1
41
1
네이버 API관련
0
52
1
61강(Context API)에서 TodoStateContext 질문
0
63
2
강의 전체 공개
0
43
1
ReturnType에서 any와 never 사용의 차이가 있나요?
0
66
2
reject로 전달되는 값(거부 이유)의 타입과 타입 가드
0
86
2
강의 수업자료(grabity.me) 내 이미지가 표시되지 않습니다
1
70
2
[해결됨]윈도우즈 환경에서 타입 스크립트 파일이 실행이 안됩니다.
1
81
5
윈도우즈 환경에서 진행중입니다.
0
59
2
Next.js설치 후 shadcn설치 오류
0
53
2
리액트 타입스크립트 설정 시 에러
0
67
1
제가 잘 몰라서 그러는데. 깃허브에 주소 강의소스 코드말인데요.
0
56
2
47강에 비회원 주문관련 질문이 있어서요.
0
64
2
소스 코드
1
360
1
SSR CSR
0
572
1
Dynamic Routes GET 메소드 만들기 질문 있습니다!
1
283
1





