이전 파트에서는 따로 새로운걸 배우지 않았다.
알고 있던걸 써먹었다. template
에 form
을 만드는 방법은 알고 있었다.
그리고 User
모델도 만들어 봤다. 새로 배운건 unique
딱 한가지 였다.
또 form
에서 postJoin controller
로 데이터를 보내는 것까지 테스트 했다.
그리고 console
에서 에러는 봤다.(현재는 안 생기는것 같다.)
만약에 DeprecationWarning
같은걸 보게 된다면 만든지 오래된 기능을 쓰고 있으니깐
업데이트 하라고 알려주는 거다. 앞으로 이런걸 자주 보게 될텐데 에러는 아니다.
그저 경고일 뿐이다. 에러가 발생 되면 작동하지 않을테고 경고가 발생하면 작동은 되지만
오래되었으니 수정하라고 알려주는 것 뿐이다. 그러면 새로 만들어진 기능으로 바꾸는게 좋다.
Use createIndexes
라고 뜨는데 index
랑 관련된 경고이다.
현재 만든 모델에 unique: true
를 써서 그렇다.
이렇게 쓰면 mongoose
가 index
를 만드는데 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
를 쓰면 videos
와 users collection
을 볼수 있다.
이제 db.users.find()
를 하면 유저 데이터를 확인할수 있다.
그런데 문제가 있다. password
가 그대로 노출되고 있다. 이러면 보안이 전혀 안되는 거다.
절대 이런식으로 password
를 저장하면 안된다. 혹시라도 해킹 받으면 모든 password
가 노출되는 거다.
그리고 같이 일하는 동료가 이 DB
에 접근 가능하면 다른 사람들의 password
를 다 확인 할수 있다.
그러니깐 password
를 저장하기 전에 보안처리를 해줘야 한다.
목표는 password
를 봐도 해석이 되지 않게 만드는 거다.
그게 가능하다고 생각하지 않을수 있는데 가능한 거다.
password
를 봐도 무슨 말인지 모르게 만들거다. 아예 이해가 되지 않도록 말이다.
그건 다음 파트에서 해보도록 한다. 이런걸 password hashing
이라고 하는데
암호를 암호답게 만들어 주는 거다. 정확한 password
가 뭔지 몰라도 체크 할수 있게 만들어준다.
원래 password
를 알지 못해도 password
가 일치 하는지 안하는지 알려주는거다.
다음 파트에서는 password
를 안전하게 저장하는걸 만들어 보도록 한다.
User
를 만들때 password
에 보안 요소를 추가해야 하니까 말이다.
User
는 Video
와 다르게 보안이 필요하다.