2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2023년 5월 22일 01:06 #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);
2023년 5월 22일 09:48 #84082
codingapple키 마스터1. 넴 2. 넴 3. 아이디비번만 db에 보관하고 jwt입니다 4. 넴 아마요 jwt쓸거면 MongoDBAdapter는 빼도 됩니다 5. jwt사용중일때만 잘나옵니다 .env파일에 nextauth어쩌구 잘 들어있나 확인해봅시다 6. 아이디/비번에서 끝났으니까 jwt로 동작할듯요
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.