Create Account #02

이전 파트에서는 따로 새로운걸 배우지 않았다.

알고 있던걸 써먹었다. templateform을 만드는 방법은 알고 있었다.

그리고 User모델도 만들어 봤다. 새로 배운건 unique 딱 한가지 였다.

form에서 postJoin controller로 데이터를 보내는 것까지 테스트 했다.

그리고 console에서 에러는 봤다.(현재는 안 생기는것 같다.)

만약에 DeprecationWarning 같은걸 보게 된다면 만든지 오래된 기능을 쓰고 있으니깐

업데이트 하라고 알려주는 거다. 앞으로 이런걸 자주 보게 될텐데 에러는 아니다.

그저 경고일 뿐이다. 에러가 발생 되면 작동하지 않을테고 경고가 발생하면 작동은 되지만

오래되었으니 수정하라고 알려주는 것 뿐이다. 그러면 새로 만들어진 기능으로 바꾸는게 좋다.

Use createIndexes 라고 뜨는데 index랑 관련된 경고이다.

현재 만든 모델에 unique: true를 써서 그렇다.

이렇게 쓰면 mongooseindex를 만드는데 console에서 경고가 발생한거다.

꼭 고칠 필요는 없는데 이걸 고치고 싶다면 db.js에서

useCreateIndex: true를 추가해 주면 된다.

useCreateIndex: true

(현재 상태에서는 경고가 나타나지 않기에 추가 하지 않는다.)

그러면 새로운 버전을 쓰게 되고 경고가 나타나지 않게 된다. 다시 말하지만 에러가 아니고 경고일 뿐이다.

이런 경고가 나타나면 그냥 진행해도 된다. 경고는 에러가 아니니까

이제 userController 에서 유저 생성 하는걸 만들어 본다.

현재 지금은 join을 클릭하면 백엔드에 요청을 보내고 데이터를 console.log해주고 있다.

그래서 이제 이 데이터를 가지고 DB에 유저로 저장 할수 있다.

먼저 User 모델을 import한다.

import User from "../models/User";
export const postJoin = async (req, res) => {
  const { name, username, email, password, location } = req.body;
  await User.create({
    name,
    username,
    email,
    password,
    location,
  });

그리고 videoController에서 Video.create()했던 것처럼 userController에도

User.create()를 쓴다. 그리고 create를 할때는 await를 써줘야 한다.

create가 끝나는걸 기다려야 하니깐 그래서 async도 써주고 await User.create({})

써줬다. 그리고 데이터도 전달해줘야 하니

  const { name, username, email, password, location } = req.body;

body에서 데이터를 꺼내준다. 이것들을 req.body에서 꺼내준다.

그리고 순서대로 User.create에 넣어 줬다. 이제 여기서 User를 생성하고 있다.

이렇게 계정을 만든 다음에는 무엇을 해야 좋을까??

계정이 만들어진 다음에는 유저를 로그인 페이지로 보내주는게 좋을 것 같다.

계정을 생성하면 로그인 할수 있는 페이지로 보내주는 거다. 보통 다른 웹사이트에서도 그렇게 한다.

그러면 rootRouter를 열어서 login페이지가 있는지 확인해 본다. 이미 만들어져 있다.

그러면 res.redirect("/login")만 써주면 된다.

login페이지에서는 비밀번호를 체크하는 그런 것들을 만들어 본다.

userController.js에서

export const postJoin = async (req, res) => {
  const { name, username, email, password, location } = req.body;
  await User.create({
    name,
    username,
    email,
    password,
    location,
  });
  return res.redirect("/login");

이렇게 해준다. 이렇게 하면 여러가지 정보를 가지고 있는 유저를 만드는 거다.

첫번째 User를 한번 만들어 본다. join으로 가서 각input 칸을 다 채워 주고 버튼을 눌러주면

login페이지로 넘어간다. 입력하기 불편하니 그리고 placeholder을 추가해 주도록 한다.

아직 /login은 아무것도 render하지 않는다.

userController를 보면 /login에 텍스트만 보내고 있는걸 알수 있다.

그래서 이런 결과가 나오고 있는 거다.

여기에 이제 template를 만들어 주면 된다.

방금 User를 만들었으니 우선 DB를 확인해 본다. 터미널을 켜서 mongo라고 치면

mongo콘솔을 볼수 있다. show dbs를 하고 wetube가 필요하니까 use wetube를 한다.

그리고 show collections를 쓰면 videosusers collection을 볼수 있다.

이제 db.users.find()를 하면 유저 데이터를 확인할수 있다.

그런데 문제가 있다. password가 그대로 노출되고 있다. 이러면 보안이 전혀 안되는 거다.

절대 이런식으로 password를 저장하면 안된다. 혹시라도 해킹 받으면 모든 password가 노출되는 거다.

그리고 같이 일하는 동료가 이 DB에 접근 가능하면 다른 사람들의 password를 다 확인 할수 있다.

그러니깐 password를 저장하기 전에 보안처리를 해줘야 한다.

목표는 password를 봐도 해석이 되지 않게 만드는 거다.

그게 가능하다고 생각하지 않을수 있는데 가능한 거다.

password를 봐도 무슨 말인지 모르게 만들거다. 아예 이해가 되지 않도록 말이다.

그건 다음 파트에서 해보도록 한다. 이런걸 password hashing이라고 하는데

암호를 암호답게 만들어 주는 거다. 정확한 password가 뭔지 몰라도 체크 할수 있게 만들어준다.

원래 password를 알지 못해도 password가 일치 하는지 안하는지 알려주는거다.

다음 파트에서는 password를 안전하게 저장하는걸 만들어 보도록 한다.

User를 만들때 password에 보안 요소를 추가해야 하니까 말이다.

UserVideo와 다르게 보안이 필요하다.

좋은 웹페이지 즐겨찾기