2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2023년 9월 16일 16:10 #98115
안승지참가자//[...nextauth.js] 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: "clientId", clientSecret: "clientSecret", }), 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: 30 * 24 * 60 * 60, //30일 },
callbacks: { //4. jwt 만들 때 실행되는 코드 //user변수는 DB의 유저정보담겨있고 token.user에 뭐 저장하면 jwt에 들어갑니다. jwt: async ({ token, user }) => { if (user) { token.user = {}; token.user.name = user.name; token.user.email = user.email; } return token; }, //5. 유저 세션이 조회될 때 마다 실행되는 코드 session: async ({ session, token }) => { session.user = token.user; return session; }, }, secret: "qwer1234", adapter: MongoDBAdapter(connectDB), }; export default NextAuth(authOptions);
//app/write/page.js
export default function Write() {
if(???){ return <div>please log in</div> }else{
return ( <div className="p-20"> <h4>write post</h4> <form action="/api/post/new" method="POST"> <input type="text" name="title" placeholder="post title" /> <input type="text" name="content" placeholder="post content" /> <button type="submit">submit</button> </form> </div> ); } }
응용문제 3번 부터 풀던 중 도저히 갈피가 잡히지 않아 질문 올려봅니다... chatGPT한테 물어보니 SessionProvider와 useSession 이라는것을 활용하여 현재 코드에서 로그인 정보를 가져올 수 있을 것이라고 하던데요. 그렇게 하다보니 기존 작업 하던 구조를 벗어나서 _app.js를 pages 폴더 안에 만들어야 한다던가, 그리고 _app.js 안에서 Component를 SessionProvider로 감싸야 한다던가. 모르는 것들이 계속 나오더라구요 chatGPT 한테 매달리는 것은 포기하고 조금 알아보니 로컬 스토리지 아래 쿠키에 로그인 관련 정보들이 저장되어 있는것 같은데. 혹시 이것을 조회하는 방법을 알아보면 해결할 수 있는 걸까요? 로컬 스토리지에서는 쉽게 됐었는데 이건 쉽지 않네요...ㅠㅠ
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.