기초 노드 리액트 - 섹션 0. Node JS (#7~14)

JeongHun·2022년 7월 26일
0

따라하며 배우는 노드, 리액트 시리즈 - 기본 강의

해당 학습 코드

7. BodyParser & PostMan & 회원 가입 기능

  1. 회원가입 기능
    client ↔ server
    client - 크롬 브라우저
    ex) git hub 회원가입 → 크롬 브라우저에서

  2. server에서 받을 떄 BodyParser dependency 이용해서 받음
    → npm install body-parser --save

  3. post man 다운
    클라이언트를 만들어 놓은게 없어서 postman 사용

  4. register router
    npm run start → 위의 connectied 까지 확인

  5. post → raw → 위와 같이 적기 → send
    error 1 : mogodb가 ip를 넣어서 만들었더니 카페에서 가서 했더니 역시나 연결이 되지 않았다. 삭제 후 해당 장소에 ip를 추가하고 create 함


8. Nodemon 설치

  1. Node Mon → 소스를 변경할때 그걸 감지해서 자동으로 서버를 재 시작해주는 tool

  2. Node Mon 다운 → npm install nodemon --save-dev

  3. node를 이용해서 index.js 를 실행 → nodemon을 이용해서 index.js 를 실행

    (backend이름은 상관 x)

  4. npm run backend
    → index.js 의 app.get('/', (req, res) => {res.send('Hello World!')}) 안의 내용을 바꾸고 저장하면 localhose:3000의 내용도 바뀜


9. 비밀 설정 정보 관리

  1. 환경 변수 process.env.NODE_ENV
    → Local 환경에서 : development
    → Deploy(배포) 한후 : production / Heroku 사이트에서 mongoURL 설정
  2. folder - config 생성, file - dev.js, key.js, prod.js 생성
  3. 위와 같이 설정하고 commit하면 github에서 URI 보호 가능


10. Bcrypt로 비밀번호 암호화 하기

  1. MongoDB 확인

  2. 현재 데이터 베이스에 저장된 비밀번호를 보면 너무 안전하지 않음
    → 그래서 Bcrypt를 이용하여 비밀 번호를 암호화 해줘서 Database에 저장해줘야 함
    → npm install bcrypt

  3. Bcrypt로 비밀번호 암호화 하는 순서
    3.1 먼저 register route로 가기
    3.2 유저 정보들을 database에 저장하기 전에가 암호화 할 타이밍
    3.3 salt를 이용해서 비밀번호를 암호화 해야됨(salt 생성, saltRounds = salt 몇글자인지)
    (bcrypt 보면서 진행)

  4. myPlaintextPassword → 순수하게 user가 입력한 password

  5. User.js 추가

    const bcrypt = require('bcrypt');
    const saltRounds = 10

  6. Postman & mongDB

11. 로그인 기능 with Bcrypt (1)

12. 토근 생성 with jsonwebtoken

  1. 로그인 기능
    11.1 login route 만들기
    11.2 데이터 베이스에서 요청한 E-mail 찾기 → User.fingOne()
    11.3 데이터베이스에서 요청한 E-mail이 있다면 비밀번호가 같은지 확인
    → Bcrypt를 이용하여 plain password와 암호화된 (Hashed) 패스워드가 같은지 확인
  2. 토큰 생성
    12.1 비밀번호까지 같다면 Token생성
    → 토큰 생성을 위해 JSONWEBTOKEN라이브러리 다운로드(npm install jsonwebtoken ) 참고사이트
    12.2 쿠키 다운 npm install cookie-parser --save
    12.3 Postman에서 실행 → login → email & password → send

13. Auth 기능 만들기

14. 로그아웃 기능

auth route 만드는 이유

  1. 페이지 이동 때마다 로그인되있는지 안되어있는지, 관리자 유저인지 등을 체크
  2. 글을 쓸때나 지울때 같은데 권한이 있는지 같은 것도 체크

auth route 만들기

  1. cookie에서 저장된 token을 server에서 가져와서 복호화를 한다.

  2. 복호화를 하면 User ID가 나오는데 그 User ID를 이용해서 DB User Collection에서 유저를 찾은 후 쿠키에서 받아온 token이 유저도 갖고 있는지 확인

    2.1 쿠키가 일치 x → Authentication False !!
    2.2 쿠키가 일치 o → Authentication True !!
    그리고 그 해당 하는 유저의 정보들을 선별해서 프론트 엔드로 보내준다

로그아웃 기능 만들기

  1. 로그아웃 Route 만들기

  2. 로그 아웃 하려는 유저를 DB에서 찾아서

  3. 그 유저의 토큰을 지워 준다

    middleware/auth.js → 추가 code는 해당 git에서 확인

    const { User } = require("../models/User");
    
    let auth = (req, res, next) => {
    
        //인증 처리를 하는 곳
    
        // 클라이언트 쿠키에서 토큰을 가져옴
        let token = req.cookies.x_auth;
        // console.log(req.cookies) 
    
        // 토큰을 복호화 한 후 유저를 찾기
        User.findByToken(token, (err,user) => {
            if(err) throw err;
            if(!user) return res.json({isAuth : false, error : true})
    
            req.token = token
            req.user = user
    
            next()
        })
    
    }
    
    module.exports = {auth};

    error : {"isAuth" : false, "error" : true}
    index.js의 logout auth가 문제가 있어서 계속 오류가 나왔다. function이 정의된 User.js랑 auth.js에서 congole.log를 찍어보니 오타였다...
    login에 cookie에서는 "x-auth"라고 하고 cookies를 가져올때는 "x_auth"라고 적었다. Postman에서 꼭 cookies 내용을 확인하길 바란다.

    logout이 원활하게 실행되면 아래와 같이 나온다.

profile
coding study

0개의 댓글