2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2024년 4월 28일 16:47 #121501
박병주참가자안녕하세요 강사님 강의 잘 보고 있습니다. next,js 강의 어느정도 정독하고 typescript 이용해서 다시 정독중인데 jwt 설정하다가 에러떠서 여쭤봅니다 밑에는 [...nextauth] 파일코드입니다.
import { connectDB } from "@/util/database"; import { MongoDBAdapter } from "@next-auth/mongodb-adapter"; import NextAuth from "next-auth"; import GithubProvider from "next-auth/providers/github"; import CredentialsProvider from "next-auth/providers/credentials"; import bcrypt from 'bcrypt';
// User 타입 정의 interface MyUser { id: string; // id 속성을 선택적으로 추가 name: string; email: string; password: string; } export const authOptions = { providers: [ GithubProvider({ clientId: '클라이언트키', clientSecret: '비밀번호', }), CredentialsProvider({ //로그인 페이지 폼 자동생성 코드 name: "credentials", credentials: { email: { label: "Email", type: "text" }, password: { label: "Password", type: "password" }, }, // 로그인 요청시 실행되는 코드 db에서 아이디 , 비번 비교함 async authorize(credentials, req): Promise<MyUser | null> { if (!credentials) return null; const db = await (await connectDB).db('forum'); const user = await db.collection('user_cred').findOne({ email: credentials.email }) as MyUser | null; if (!user) { console.log('해당 이메일은 없음'); return null; } const pwCheck = await bcrypt.compare(credentials.password, user.password); if (!pwCheck) { console.log('비번 틀림'); return null; } return user; }, }), ], // 로그인 전략 선택 session: { strategy: 'jwt', maxAge: 30 * 24 * 60 * 60, // 30 days }, // jwt 만들떄 실행되는 콛드 callbacks: { async jwt({ token, user }: { token: any; user?: MyUser }) { if (user) { token.user = { name: user.name, email: user.email }; } return token; }, // 유저 세ㅅ션이 조회될 때 마다 실행되는 코드 async session({ session, token }: { session: any; token: any }) { session.user = token.user; return session; }, }, secret: "4790rozh", adapter: MongoDBAdapter(connectDB), // 다른 db 쓸거면 다른 adapter 씀 예를 들면 레디스를 쓰면 렘에다가 저장해서 되게 빠름 }; export default NextAuth(authOptions);
맨 마지막 줄 authOptions에서
Argument of type '{ providers: (OAuthConfig<GithubProfile> | CredentialsConfig<{ email: { label: string; type: string; }; password: { label: string; type: string; }; }>)[]; session: { ...; }; callbacks: { ...; }; secret: string; adapter: Adapter; }' is not assignable to parameter of type 'AuthOptions'. The types of 'session.strategy' are incompatible between these types. Type 'string' is not assignable to type 'SessionStrategy | undefined'.ts(2345) const authOptions: { providers: (OAuthConfig<GithubProfile> | CredentialsConfig<{ email: { label: string; type: string; }; password: { label: string; type: string; }; }>)[]; session: { ...; }; callbacks: { ...; }; secret: string; adapter: Adapter; }
이런 에러가 뜹니다. 콜백함수 쪽이 문제가 있는것인지 감이 잘 잡히지않네요,, 또한 layout.tsx파일에서도 interface UserInfo { user: { name: string; email: string; image: string; }; } export default async function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { let userInfo:UserInfo|null = await getServerSession(authOptions) authOptions 이 부분이 똑같은 에러 메세지를 띄고있습니다.
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.