2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2023년 9월 15일 02:19 #97971
백대훈참가자선생님 안녕하세요 회원기능 만들기 : 아이디/비번 + JWT 사용하기 에서 주신 응용문제 응용을 해서 개발을 해봤는데, 일단 원하는 대로 실행이 돼서 완료 했는데 이거는 숙제가 아니라 따로 알려주시는 게 없어서 괜찮은지 문의드립니다. 1,2 : 공란으로 가입 시 처리 및 이미 가입된 이메일 처리 import { connectDB } from "@/util/database"; import bcrypt from "bcrypt";
export default async function handler(요청,응답){ const db = (await connectDB).db('forum') let findemail = await db.collection('user_cred').findOne({email: 요청.body.email }) if (요청.method == 'POST'){ if(요청.body.name == ''){ 응답.status(200).json('이름을 채워주세요') } else if(요청.body.email == ''){ 응답.status(200).json('이메일 주소를 채워주세요') } else if(요청.body.password == ''){ 응답.status(200).json('비밀번호를 채워주세요') } } if (findemail == null){ let hash = await bcrypt.hash(요청.body.password, 10) 요청.body.password = hash let db = (await connectDB).db('forum'); await db.collection('user_cred').insertOne(요청.body) 응답.status(200).json('가입성공') } else{ 응답.status(200).json('이미 가입 된 계정입니다.') } 공란은 조건문으로 저렇게 처리했고, 이미 가입된 계정의 여부는 이메일을 찾는 변수를 선언해서 그것이 있으면 이메일이 출력되고 없으면 null이 출력 되길래 null이 출력되면 가입이 되도록 그외의 것은 이미 가입 된 계정으로 처리했습니다. 3. 로그인 된 계정만 작성권한
import { getServerSession } from 'next-auth' import { authOptions } from '@/pages/api/auth/[...nextauth]' import NoLogWrite from './nologwrite' import LogWrite from './logwrite'
export default async function write(){ let session = await getServerSession(authOptions) return( <div> { session == null ? <NoLogWrite/> : <LogWrite/> } </div> ) } 이거는 알려주신 삼항연산자를 활용하여 다른 하위 페이지를 두어 로그인 된 유저는 작성 페이지를, 로그인 하지 않은 유저는 로그인 하라는 문구가 뜨는 페이지가 나오게 개발하였습니다. 4. 관리자 계정만 삭제가 가능하게 개발
import {connectDB} from "@/util/database.js" import { ObjectId } from "mongodb"; import { getServerSession } from "next-auth/next"; import { authOptions } from "../auth/[...nextauth]";
export default async function handler(요청,응답){ const client = await connectDB; let session = await getServerSession(요청,응답,authOptions) if(session){ 요청.query.author = session.user.email 요청.query.name = session.user.name } if(요청.method == 'GET'){ if(요청.query.name == 'admin'){ const db = client.db("forum") let result = await db.collection('post').deleteOne({_id : new ObjectId(요청.query.dynamic)}) return 응답.status(200).json('삭제완료') } else if(session){ const db = client.db("forum") let result = await db.collection('post').deleteOne({_id : new ObjectId(요청.query.dynamic) , author : 요청.query.author}) return 응답.status(200).json('삭제완료') } else{ return 응답.status(200).json('권한이 없습니다.') } }
이거는 따로 롤 데이터를 추가하는 방법을 알려주시긴 했는데 생각해보니 관리자 계정은 제가 우선적으로 가입시키면 되지 않나 싶어서 지정 name으로 삭제를 요청하면 되게끔 조건문으로 설정하였습니다. 그리고 로그인 상태면 전에 과제 처럼 이메일이 같은 경우만 삭제되게 나머지는 권한 없음으로 처리하였습니다. 번거로우시겠지만 피드백 부탁드립니다.
2023년 9월 15일 09:52 #97995
codingapple키 마스터잘될거같군요 테스트시 의도대로 잘동작하면 잘짠코드입니다 마지막은 현재 유저랑 글에저장된 유저랑 동일한지 검사하는게 없는듯요
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.