[DevCamp] 로그인 고도화 실습

동건·2025년 2월 20일
0

DevCamp

목록 보기
15/85

로그인 고도화 실습

저번에 완성하지 못하고 넘겼던 로그인 기능과
추가적으로 예외처리, 고도화를 실습하였다.


로그인 기본 로직

// 로그인
app.post('/login', (req, res) => {
	let {userId , password} = req.body;
  	db.forEach((user,id)=>{
      if(user.userId === userId){
        console.log("같은 아이디");
       	
        // pwd도 같은지 확인
        if(user.password === password){
			console.log("같은 패스워드");
        }else{
         	console.log("다른 패스워드"); 
        }
      }
    })
})

db.forEach() 를 사용하여 아이디가 존재하는지 우선 확인을 해야한다.
우선 body에서 넘어온 userId 가 db에 존재하면 console.log("같은 아이디") 로 출력하고
password 도 비교해야하기 때문에
같은 로직으로 password 또한 db에서 비교한다.


로그인 예외 처리

지금 코드는 forEach() 안에서 console.log 를 실행하기 때문에 db에 10개의 데이터가 있다면
출력도 10번 반복하기 때문에 비효율적이라고 생각한다.

// 로그인
app.post('/login', (req, res) => {
  let {userId , password} = req.body;

  let loginUser = {};

  db.forEach((user,id)=>{
    if(user.userId === userId){
      loginUser = user;
    }
  })
  if(!isEmpty(loginUser)){
    console.log("같은 아이디");
    // pwd도 같은지 확인
    if(loginUser.password === password){
      console.log("같은 패스워드");
    }else{
      console.log("다른 패스워드"); 
    }
    
  }else{
    console.log("입력하신 아이디는 없는 아이디 입니다.");
  }
})

그래서 고려해 위 같은 코드를 만들었다.
우선 loginUser 라는 변수를 새로 만들어
forEach() 안에서 같은 user가 있다면 새 변수에 저장을 하고
forEach() 밖에서 if/else 문으로 예외 처리를 하는 것이다.

이때 isEmpty() 라는 함수를 사용했는데 아래에서 더 설명하겠다.


isEmpty()

function isEmpty(obj){
    if(Object.keys(obj).length === 0){
        return true;
    }else{
        return false;
    }
}

빈 객체 확인하는 방법 3가지
{}
1. 객체.keys()
2. for
3. lodash (외부 패키지)

위 코드는 실습 진행을 위한 isEmpty() 함수이며
이때 빈 객체를 확인 하는 방법 3가지도 같이 알아보았다.

Object.keys()

위 코드를 사용하면 객체가 배열처럼 반환이 된다.
따라서 .length 로 그 길이가 0인지 아닌지 비교를 해 빈 객체인지 확인하는 것이다.


로그인 고도화

// 로그인
app.post('/login', (req, res) => {
    console.log(req.body)   // id, pwd

    // id가 db에 저장된 회원인지 확인하기
    const {userId , password} = req.body;

    let hasUserId = false;
    let loginUser = {};

    db.forEach((user , id) => {
        if(user.userId === userId){
            loginUser = user;
        }
    })

    if(!isEmpty(loginUser)){
        if ( loginUser.pwd === password ){
            res.status(201).json({
                message : `${loginUser.name}님 로그인 성공하셨습니다.`
            })
        }else{
            console.log("패스터워는 다르다");
        }
    }else{
        res.status(404).json({
            message : `입력하신 아이디는 없는 아이디 입니다.`
        })
    }
})

로그인 코드를 더 고도화 한 코드가 위 코드이다.
크게 바뀐 부분은 없고
response 부분에 .status 를 붙힌 것이다.

res.status(...)... 로 어떤 상태인지 더 상세하게 작성할 수 있다.

이렇게 정상적으로 회원가입 진행되고

로그인도 성공적으로 완성했다!


TIL

오늘은 로그인을 마무리 하면서 사용자 서비스에 관한 내용을 학습했다.

이런 방식으로 실제 사이트들도 운영되겠구나 생각을 하였고 아직 login 부분이 익숙하지 않아 남는 시간에 더 코드를 회고해보면서 숙달시키는게 중요하겠다고 생각을 했다.

profile
배고픈 개발자

0개의 댓글