티스토리 뷰

문제발생


router.post("/sign-in", async (req, res) => {
  // 이메일과 비밀번호로 로그인 요청
  const { email, password } = req.body;

  // 해당 이메일을 가지고 있는 유저가 있는지 검색
  const user = await prisma.users.findFirst({ where: { email } });

  // 없다면 존재하지 않는 이메일입니다.
  if (!user) {
    return res.status(401).json({ message: "존재하지 않는 이메일 입니다." });

    // 이메일은 있지만사용자가 입력한 비밀번호와 암호화된 비밀번호가 일치하지 않는다면 에러문구와 함께 return
  } else if (!(await bcrypt.compare(password, user.password))) {
    return res.status(401).json({ message: "비밀번호가 일치하지 않습니다." });
  }

  // 이메일과 비밀번호 다 통과가 된다면 토큰 발급
  const token = jwt.sign(
    {
      userId: user.userId, //payLoad에 userId를 인코딩 하여 넣는다
    },
    process.env.JWT_SECRET_KEY, // 지정된 비밀키를 사용하여 토큰을 서명
    { expiresIn: "12h" } // 유효시간 12시간
  );

  res.cookie("authorization", `Bearer ${token}`); // authorization이라는 키에 표준 토큰 형식 값으로 넣는다.

  if (user.userId == 0000) {
    return res.status(200).redirect("/api/personnelStaff");
  }

  // status 200상태(OK : 서버가 요청을 성공적으로 처리)로 return
  return res.status(200).json({ message: "로그인에 성공하였습니다." });
});

위 코드에서 가장 아랫부분

이부분에서 에러가 났다.

 

해결과정


해당 코드 부분은 관리자가 로그인을 했을 때 관리자만의 작업을 할수있는 api로 연결하는 로직이였다.

 

그래서 조건으로 user.userId 즉, 들어온 로그인된 userId의 값이 0000과 같으면 해당 로직으로 이동하는 것이다. 

 

하지만 이론상 어렵지 않게 다음 로직으로 이동할수 있는 부분에서

SyntaxError가 발생했다.

 

해당 조건이 잘못됐다는건 한눈에 봐도 알겠고 그 밑의 에러 내용을 읽어보니

 

Octal literals are not allowed in strict mode. 엄격모드에서는 허용하지 않는 리터럴? 이라고 한다. 

 

이 엄격모드 공부했을 때는 var로 변수선언 했을때 호이스팅 안되는것 까지는 알았는데 여기서 이런에러가 뜨다니..

 

찾아보니 엄격모드에서 0000은 8진수로 해석되고 8진수 리터럴은 엄격모드에서 허용되지 않는다고 한다.

 

이 문구를 본뒤 데이터 베이스에서 관리자의 userId를 0으로 지정하고 비교 연산을 0으로 하니

 

서버가 제대로 실행되었고

 

이력서의 모든 내용도 가져오는걸 확인 할 수 있었다.

 

 

느낀점


엄격모드를 가볍게 여기고 넘어갔지만 다시한번 깊게 공부해야할 필요성을 느낀 문제였다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함