본문 바로가기
웹/NodeJS

[NodeJS] Express와 Sequelize-cli를 사용한 로그인 구현

by 꾸적꾸적 2022. 6. 2.

 

이전 글, 회원가입 구현

2022.06.02 - [NodeJS] - [NodeJS] Express와 Sequelize-cli를 사용한 회원가입 구현

 

[NodeJS] Express와 Sequelize-cli를 사용한 회원가입 구현

[NodeJS] Express와 Sequelize-cli를 사용한 DB 연결 지난 글에서 이어진다. 이번에도 저번글에서 참고했다고 밝힌 아래 링크를 참조했다. NodeJS 및 관련 공부처 :: Victolee 의 tistory 블로그 저번 시간에 DB..

gguzuck.tistory.com

이번에는 로그인 구현을 해보도록 하겠다.

 

로그인을 위해 토큰을 발행해서 쿠키에 저장하는 것은

이전 기본 JWT 토큰 하나로 구현을 했었으나 그렇게 업로드하려면

그 부분은 다시 코드를 짜야하는 바람에(...)

Access 및 Refresh 토큰을 사용한 JWT 방식을 사용하여 다음 글에 업로드할 생각이다.

어떻게 보면 더 안전하고 유지하기 좋은 방식이니 이 방식이 더 좋다고 생각한다.

 

어쨌건, 이번에는 로그인 방식만 구현하는 것으로 넘어갈 생각이다.

 


 

로그인은 기본적으로 먼저 DB에 데이터를 저장하고,

그 데이터를 바탕으로 로그인을 하는것을 의미한다.

 

순서로 따지면,

1. users/sign_up 에서 회원가입 진행

2. 회원 정보가 DB에 저장

3. users/login에서 로그인 진행

4. 3에서 입력된 정보를 DB와 비교하고,

4-1. 정보가 동일하다면 users 로 리다이렉트

4-2. 정보가 다르다면 users/login으로 재리다이렉트

이런 순으로 진행된다.

 

순서를 알았으면 이제 구현해보자.

먼저 로그인 UI부터 구현한다.

 

// ../view/user/login.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

<h3>로그인</h3>
<form action="/users/login" method="post">
    <table>
        <tr>
            <td>이메일 : </td>
            <td><input type="text" name="userEmail"></td>
        </tr>
        <tr>
            <td>비번 : </td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td><input type="submit" value="로그인"></td>
        </tr>
    </table>
</form>

</body>
</html>

위 코드는 이전 참고한 블로그에서 그대로 가져온 내용이며,

매우 기본적인 내용임으로 넘어가도록한다.

 


위와 같이 UI가 구현되었으니, 이번에도 라우터를 구현할 차례이다.

 

// ../routes/users.js

//###############################################################################
// 임시 로그인 후 메인 페이지
router.get('/', function(req, res, next) {
  if(req.cookies){
    console.log(req.cookies);
  }
  res.send('환영합니다~');
});

//###############################################################################
// 로그인 GET
router.get('/login', function(req, res, next) {
  res.render("user/login");
  let body = req.body;
});

// 로그인 POST
router.post("/login", async function(req,res,next){
  let body = req.body;

    let result = await models.user.findOne({
        where: {
            email : body.userEmail
        }
    });

    let dbPassword = result.dataValues.password;
    let inputPassword = body.password;
    let salt = result.dataValues.salt;
    let hashPassword = crypto.createHash("sha512").update(inputPassword + salt).digest("base64");


    // 패스워드로 인증하기.
    // 패스워드가 동일하다면 넘어간다.
    if(dbPassword === hashPassword){
      console.log("비밀번호 일치");

      res.redirect("/users");
    }
    else{
      console.log("비밀번호 불일치");
      res.redirect("/users/login");
    }
});

 

이로써 로그인 구현이 완료되었다.

 

다음 글에서는

JWT 방식, 즉, 토큰을 사용하는 인증방식을 구현할 예정이다.

댓글