• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Next.js 게시판 nextauth authOptions 타입 에러

nextauth authOptions 타입 에러

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #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 이 부분이 똑같은 에러 메세지를 띄고있습니다.
    
    #121506

    codingapple
    키 마스터
    export const authOptions : NextAuthOptions ={} 해봅시다
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠