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

home2 게시판 Next.js 게시판 응용문제 문의드립니다.

응용문제 문의드립니다.

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #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으로 삭제를 요청하면 되게끔 조건문으로 설정하였습니다.
    
    그리고 로그인 상태면 전에 과제 처럼 이메일이 같은 경우만 삭제되게
    
    나머지는 권한 없음으로 처리하였습니다.
    
    번거로우시겠지만 피드백 부탁드립니다.
     
    #97995

    codingapple
    키 마스터
    잘될거같군요 테스트시 의도대로 잘동작하면 잘짠코드입니다
    마지막은 현재 유저랑 글에저장된 유저랑 동일한지 검사하는게 없는듯요
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 호 / 개인정보관리자 : 박종흠