Web/Basic (Back-end)
[#9] 로그아웃 기능 구현
📒로그아웃 구현 과정 로그아웃 Route 만들기 로그아웃하려는 유저를 DB에서 찾기 그 유저의 Token 지우기 📒로그아웃 하는데 Token을 지우는 이유 > Authentication 인증을 할 때 Client Cookie의 Token을 가져와서 DB의 Token과 확인하는데, 맞지 않으면 인증이 안됨. > Token을 지우기만 하면 인증이 안돼서 로그인이 풀려버림. //Log-out app.get('/api/users/logout', auth, (req, res)=> { //로그아웃하려는 유저를 DB에서 찾기(미들웨어에서 찾아서) User.findOneAndUpdate({ _id: req.user._id}, {token: ""} ,(err, user)=> { if(err) return res.json..
[#8] Authentication 기능 구현 (Auth Route 만들기)
📒접근 제한의 필요성 > 한 페이지 안에서도 로그인을 요구하는 페이지가 필요할 수도 있고, admin(관리자) 권한이 요구될 수도 있음. 📒Authentication 과정 Token을 만들면 Server에서 유저 정보에 넣고, Client에서 Cookie에 넣음. 그 두가지 Token이 서로 맞는지 체크하는데, 그 체크하는 과정: Client가 Cookie에 담긴 Token을 Server로 보내면 Server에서 가져와서 복호화 (암호화되어 있으므로). 복호화를 하면 User ID가 나옴. (Token 만들 때 User ID와 'secreteToken'을 이용해 Token을 만들었기 때문.) 그 User ID를 이용해 DB User Collection에서 유저를 찾은 후 Client의 Cookie에서 받..
[#7] Bcrypt를 이용해 비밀번호 암호화 / 로그인 기능 구현
📒Bcrypt란? bcrypt - npm > 보낼 때는 정보 그대로 보내지만 암호화해서 DB에 저장할 수 있음. > Register Route에서, 유저 정보들(Account, Password 등)을 DB에 저장하기 전!이 암호화할 타이밍. > Bcrypt를 이용해 비밀번호 암호화하려면 salt를 생성해야 함. 📒로그인 기능 구현하기 DB에서 요청한 E-mail 찾기 DB에서 요청한 E-mail이 있다면 비밀번호가 같은지 확인 비밀번호가 같다면 Token 생성 생성한 Token을 Cookie에 저장 (*Token은 Cookie, Local Storage, Session Storage 등등 여러가지 공간에 저장할 수 있는데, 각각 장단점이 있다. 여기서는 Cookie에 저장) //index.js app.p..
[#6] 비밀 설정 정보 관리
📒비밀 정보 보호하기 > 소스 코드를 Git에 올리면 다른 사람들이 secret한 정보들까지 모두 볼 수 있게됨. > 그래서 비밀 정보들을 모두 한 파일에 몰아두고 .gitignore 파일에 넣어줌. > 개발환경이 로컬인지, 배포 모드인지에 따라서 분기 처리를 다르게 해줘야 함. ex) heroku 서비스를 통해 배포할 때 📒Local development모드에서? > 소스코드에서 변수를 가져올 수 있음. > 환경변수 process.env.NODE_ENV가 development로 나옴. 📒Deploy(배포) 후 production모드에서? > 헤로쿠같은 배포 서비스 페이지에서 Config Vars로 따로 직접 관리를 해줌. > 환경변수 process.env.NODE_ENV가 production으로 나옴.
[#5] Nodemon 설치
📒Nodemon이란? > 소스 변경사항이 있어도 자동으로 그 변경사항을 감지해서 서버를 내렸다가 다시 올려야 하는 번거로움을 없애줌. > 설치 후, 시작할 때 nodemon으로 시작하기 위해 script를 하나 더 만들어야 함. 📒package.json 파일에서 scripts 추가 "backend": "nodemon index.js",
[#4] Body-parser & Postman
📒Body-parser Dependency > Client가 보내는 데이터(아이디, 비밀번호 등)를 Server에서 받을 수 있게 해줌. > 그 "정보"들을 req.body로 출력해줌. 📒Postman > 로그인이나 회원가입 할 때처럼 정보를 보내는 Client 역할. 📒Register Route 만들기 //Register Route const express = require('express') const app = express() const port = 5000 const bodyParser = require('body-parser'); //User 모델 가져오기 const {User} = require('./models/User'); //option1: bodyparser가 client로부터 오는 ..