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

home2 게시판 Next.js 게시판 선생님 질문있어요 급해요.. 로그인회원가입 구현 질문

선생님 질문있어요 급해요.. 로그인회원가입 구현 질문

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #84053

    정중식
    참가자
    강의에서 소셜로그인 로그인파트, 아이디/비밀번호 회원가입파트, OAuth-세션 로그인 파트 분리되어있는데
    
    갑자기 혼란스러워서 질문드립니다.
    
    
    1. 기본적으로 소셜로그인은 JWT인데, (강의에서 소셜로그인 로그인파트가 JWT구현인가요?) 
    
    2. OAuth-세션 로그인 파트 강의부분은 1번에서 다음 코드를 추가해서 JWT구현이아니라 세션으로 동작할 수 있게 해준건가요?
    (추가한 코드부분)
    >>  adapter : MongoDBAdapter(connectDB), 
     
    3. 아이디/비밀번호 회원가입,로그인 파트에서 회원가입과 로그인은 세션도아니고 JWT도 아닌 그냥 DB에 저장해주는건가요?
    
    4. nextjs에서 회원가입,로그인 방식은 기본이 JWT지만, 세션으로 작동하게끔 코드를 짜주면 JWT로 짠 코드는 그럼 무용지물이 된다고 알고있는데 맞을까요?
    아래의 코드는 JWT와 세션으로 로그인/회원가입하는 코드인데 여기서 그럼 제가 세션으로 동작하게하지말고 다 JWT로 동작하게 해주고싶다면
    5번 부분과,   adapter: MongoDBAdapter(connectDB), 코드는 제거해줘도되는걸까요?
    
    5. 미들웨어 파트 까지 공부했는데   const session = await getToken({ req: req }); 
       이 코드가 로그인을해도 null이 나옵니다. ( 소셜로그인, 일반 로그인 다 해봤음) 
       이부분은 서버에서 세션 확인하는 코드로 체크해서 코드짜면될까요?
    
    6. 원래 소셜로그인이나 일반 회원가입/로그인으로 구현하면 nextjs는 jwt방식이지만, 강의대로 쭈욱 따라했으면 소셜로그인,일반 회원가입 로그인 기능이  세션방식으로 바뀐것이죠?
    
    
    
    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';
    export const authOptions = {
      providers: [
        GithubProvider({
          clientId: process.env.githubID,
          clientSecret: process.env.githubPW,
        }),
        CredentialsProvider({
          //1. 로그인페이지 폼 자동생성해주는 코드
          name: 'credentials',
          credentials: {
            email: { label: 'email', type: 'text' },
            password: { label: 'password', type: 'password' },
          },
          //2. 로그인요청시 실행되는코드
          //직접 DB에서 아이디,비번 비교하고
          //아이디,비번 맞으면 return 결과, 틀리면 return null 해야함
          async authorize(credentials) {
            let db = (await connectDB).db('forum');
            let user = await db
              .collection('user_cred')
              .findOne({ email: credentials.email });
            if (!user) {
              console.log('해당 이메일은 없음');
              return null;
            }
            const pwcheck = await bcrypt.compare(
              credentials.password,
              user.password
            );
            if (!pwcheck) {
              console.log('비번틀림');
              return null;
            }
            return user;
          },
        }),
      ],
      //3. jwt 써놔야 잘됩니다 + jwt 만료일설정
      session: {
        strategy: 'jwt',
        maxAge: 24 * 60 * 60, //하루
      },
      callbacks: {
        //4. jwt 만들 때 실행되는 코드, JWT에 기입할 정보
        //user변수는 DB의 유저정보담겨있고 token.user에 뭐 저장하면 jwt에 들어갑니다.
        jwt: async ({ token, user }) => {
          if (user) {
            token.user = {};
            token.user.name = user.name;
            token.user.email = user.email;
            token.user.role = user.role;
            // DB에 저장된 유저가 일반 유저인지, 어드민인지도 토큰에 보낼 수 있음
          }
          return token;
        },
        //5. 유저 세션이 조회될 때 마다 실행되는 코드
        // 컴포넌트 안에서 보여줄 유저 정보, 토큰에있는 유저들을 컴포넌트 안에서 보여준다고 생각하면됨
        session: async ({ session, token }) => {
          session.user = token.user;
          return session;
        },
      },
      secret: process.env.secretKey,
      adapter: MongoDBAdapter(connectDB),
    };
    export default NextAuth(authOptions);
     
     
    #84082

    codingapple
    키 마스터
    1. 넴 
    2. 넴 
    3. 아이디비번만 db에 보관하고 jwt입니다 
    4. 넴 아마요 jwt쓸거면 MongoDBAdapter는 빼도 됩니다
    5. jwt사용중일때만 잘나옵니다 .env파일에 nextauth어쩌구 잘 들어있나 확인해봅시다 
    6. 아이디/비번에서 끝났으니까 jwt로 동작할듯요
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 호 / 개인정보관리자 : 박종흠