CRUD, jsonwebtoken

신동윤·2023년 2월 13일
0
post-thumbnail

node.js와 mongoDB연결

mongodb+srv://<name>:<password>@cluster0.uazu7ta.mongodb.net/<DBname>?retryWrites=true&w=majority

error

새로운 폴더에서 다시 시작하려니까, 안깔려있는 패키지들이 많아서 시간을 잡아먹었다.

전과 같은 에러로, router파일 밑에 module.exports = router;를 쓰지않아서 발생

TypeError: Router.use() requires a middleware function but got a Object

user.schema에서 정의한 { Id }를 써줬어야 했는데, { userId }라는 변수를 선언해서 값이 undifined가 나왔다.
객체구조분해할당을 잘못 이해한 까닭이다.

TypeError: Cannot destructure property 'userId' of 'res.locals.user' as it is null.

ObjectParameterError: findOne()에 대한 매개변수 "필터"는 객체여야 합니다. 파라미터는 2입니다.

ObjectParameterError: Parameter "filter" to findOne() must be an object, got 2


post를 정의할때 find로 찾았을땐 [{   }]형태여서 post.userId는 undified였다.

post를 정의할때 findOne을 사용하니 {   }형태여서 값이 나왔다.

같은 값 중복에러(삭제 후 재생성시 발생)

MongoServerError: E11000 duplicate key error collection: test.posts index: postId_1 dup key: { postId: 2 }

로그인 기능구현

회원가입

  1. user의 schema, router 생성하기
  2. user.schema는 nickname과 password를 정의해주고 가상의 userID를 할당해준다.
  3. user.router는 nickname의 중복검사, password와 confirm을 비교하여 같다면 계정을 생성한다.
  4. user의 고유값을 정해준다. 회원가입 시 1부터 ++1된 숫자들을 넣어준다.
  5. app.js에서 router의 경로를 등록해준다.

로그인

  1. auth의 router는 DB의 데이터와 비교하여 nickname, password의 일치 여부를 확인한다.
  2. jsonwebtoken을 활용해 userID(고유값)를 암호화하여 cookie에 담아준다.
  3. app.js에서 router의 경로를 등록해준다.

middleware

  1. cookie를 받아와 존재하는지 여부를 확인한다.
  2. cookie의 정보를 복호화를 통해 값을 반환하여 반환된 값이 실제 값과 같은지 확인한다.
  3. res.locals.user = user; 를 통해 DB에서 사용자정보를 가져오지않고 express가 제공하는 안전한 변수에 담아 사용한다. (이미 데이터베이스에서 사용자 정보를 가져온것이라. 이렇게 담아둔 값은 정상적으로 응답 값을 보내고 나면 소멸하므로 해당 데이터가 어딘가에 남아있을 걱정의 여지를 남겨두지 않게 됩니다 😎)
  4. app.js

0개의 댓글