Javascript/Node.js

쿠키와 인증 - 인증 구현

leeeee.yeon 2021. 7. 10. 21:35

이제 쿠키를 이용하여 로그인/로그아웃을 구현해볼 것이다.

 

그러나 이번에 만드는 인증 기능은 이메일, 닉네임, 비밀번호가 쿠키로 그대로 노출되므로 실전에서 사용하면 안된다 !!

 

Hmm ... 강의를 보며 따라하려고 했으나 ... ! 내 main.js 파일은 express로 이루어져있다. 일단 express인지 여부와 상관 없는 사항에 대해서만 내 코드를 수정하고, 인증 구현 과정은 실습 없이 블로그에 글로 남기겠다 ...!


 

1. template.js에 '/login'으로 연결되는 a 태그를 추가하였다. ( UI 만들기 )

2. main.js에서 else if 문을 추가하여 login 페이지를 구현해주었다. ( 메인 페이지 코드를 가져와서 활용 )

<form action="login_process" method="post">
	<p><input type="text" name="email" placeholder="email"></p>
	<p><input type="password" name="password" placeholder="password"></p>
	<p><input type="submit"></p>
</form>

여기서 비밀번호를 입력하는 input 태그의 type을 password로 하면 비밀번호가 ●●● 이런 식으로 나온다.

 

3. else if문을 이용하여 login_process를 구현해주자. ( delete_process 코드를 가져와서 활용 )

if(post.email === 'egoing777@gmail.com && post.password === '111111'){
	response.writeHead(302,{
    'Set-Cookie' : [
    `email=${post.email}`,
    `password=${post.password}`,
    'nickname=egoing'
    ],
    Location: '/'
    });
    response.end();
} else{
	response.end('Who?');
}

else if 문 안에서 위와 같은 방식으로 쿠키를 생성한다. else문은 로그인을 실패했을 때 코드이다.

 

4. 이제 로그인 여부를 체크하는 코드가 필요하다. 로그인 여부를 체크하는 코드를 authIsOwner()이라는 함수로 따로 만들어주었다.

var cookie = require('cookie');

function authIsOwner(request, response){
  var isOwner='false';
  var cookies = {};
  if(request.headers.cookie){ // undefined -> false
      cookies = cookie.parse(request.headers.cookie);
  }
  if(cookies.email === 'egoing777@gmail.com' && cookies.password === '111111'){
      isOwner = true;
  }
  
  return isOnwer;
}

var isOwner = authIsOwner(request, response);

 

5. login 상태라면 login a 태그가 logout이라고 뜨도록 UI를 수정해야 한다.

 

template.js의 해당 부분을 아래와 같이 바꿔준다.

  HTML:function(title, list, body, control, authStatusUI = '<a href="/login">login</a>'){
    return `
    <!doctype html>
    <html>
    <head>
      <title>WEB1 - ${title}</title>
      <meta charset="utf-8">
    </head>
    <body>
      <h1><a href="/">WEB</a></h1>
      ${authStatusUI}
      <br>
      <a href="/author">author</a>
      ${list}
      ${control}
      ${body}
    </body>
    </html>
    `;

 

그리고 main.js에 아래 코드를 추가하여 준다.

 

function authStatusUI(request, response){
	var authStatusUI = '<a href="/login">login</a>';

    if(authIsOwner(request, response)){
        authStatusUI = '<a href="/logout_process">logout</a>';
    }
    
    return authStatusUI;
}

 그리고 메인 페이지, 상세 페이지, create, update에 해당하는 if문에 authStatusUI()를 추가한다.

 

6. 이제 logout을 했을 때, 쿠키가 삭제되도록 하자.

logout_process라는 else if문을 만들자.

response.writeHead(200, {
    'Set-Cookie': [
    'email=; Max-Age=0',
    'password=; Max-Age=0',
    'nickname=; Max-Age=0'
});

 Max-Age를 0으로 설정해주면 쿠키를 삭제할 수 있다.

 

7. 로그인한 사용자들만 CRUD에 접근할 수 있도록 하자. 

 

create_process 부분에 아래 코드를 추가하자.

if(authIsOwner(request, response) === false){
	response.end('Login required!!');
	return false; // 아래 코드가 실행되지 않도록
}

이 코드를 update, delete 등 인증이 필요한 모든 곳에 넣는다.

 

여기까지가 쿠키와 인증 내용이다 ~!~! 이제 express에서 Session을 이용하여 인증을 구현하러 가보자 ~~