혼자 고민해보기_ 개발/TIL (Today I Learned)

20230621(수)_ 노드 JS 숙련 과제 Lv2 진행

nuri-story 2023. 6. 22. 00:08

금일 달성 항목

1)  노드 JS 숙련 과제 Lv2 진행 완료
   : 회원가입, 로그인 기능 추가


문제 해결 과정 1- Virtuarl Id가 생성되지 않음

[문제]

// 내 정보 조회
router.get("/users/me", authMiddleware, async (req, res) => {
  const { nickname } = res.locals.user;

  res.status(200).json({
    user: { nickname },
  });
});

토큰이 발급된 로그인 계정을 조회하기 위한 api를 실행하는데 자꾸만 아래와 같은 오류가 떴습니다.

jsonwebtokenerror: invalid signature

 

[시도 및 해결]

튜터님과 확인해보니 미들웨어에 있는 토큰 아이디 키와 로그인 영역의 토큰 아이디 키가 달라서 생긴 문제였습니다.

//auth-middleware.js

 const { userId } = jwt.verify(authToken, "customized-secret-key");
//routers/login.js

const token = jwt.sign({ userId: user.userId }, "customized-secret-key");

또한 혹시 몰라 쿠키를 재 설치하고

// 쿠키 설치

npm install cookie-parser

app.js에 cookie-parser가 잘 짜여져 있는지 다시 확인해 보았습니다.

const express = require("express");
const app = express();
const port = 3000;

const cookieParser = require("cookie-parser");
const postsRouter = require("./routes/posts.js");
const commentsRouter = require("./routes/comments.js");
const loginRouter = require("./routes/logins.js");
const signupRouter = require("./routes/signups.js");

const connect = require("./schemas");
connect();

app.use(express.json());
app.use(cookieParser());
app.use(express.urlencoded({ extended: false }));
app.use("/", [postsRouter, commentsRouter, loginRouter, signupRouter]);



app.get("/", (req, res) => {
  res.send("Hello World!");
});

app.listen(port, () => {
  console.log(port, "포트로 서버가 열렸어요!");
});

 

[알게된 점]

cookie를 통해서 로그인된 사용자를 전달하는 방법은 프론트와 협의하기 좋은 방향이지만 개발시에는 header로 로그인된 사용자를 설정하는 것이 더 낫다고 하셨습니다. 이와 관련해서는 공부가 더 필요해 보일 것으로 보입니다.

headers를 통한 토큰 아이디 + 계정 생성