Project_xxx

[Project_] Item-Simulator [Trouble Shooting]

wakelight23 2024. 11. 28. 21:01

권한 미들웨어 설정 문제

Error가 발생

Error Log ▼

prisma:error 
Invalid `prisma.account.findFirst()` invocation:

{
  where: {
+   accountId: {
+     equals: Int | IntFieldRefInput,
+     in: Int[],
+     notIn: Int[],
+     lt: Int | IntFieldRefInput,
+     lte: Int | IntFieldRefInput,
+     gt: Int | IntFieldRefInput,
+     gte: Int | IntFieldRefInput,
+     not: Int | NestedIntFilter
+   }
  }
}

Argument `accountId` is missing.

 

왜 발생했을까? 

 - admin.router와 users.router를 분리해서 관리자 계정과 일반 유저 계정을 분리하는 과정에서 발생
 - 단순히 같은 auth.middleware로 미들웨어 처리를 하면 실행이 될 것이라 예상
 - user.router는 정상 작동하는 반면, admin.router는 위와 같은 Error가 발생

 

Error에 대해 잘 대응했는가?

 - 토큰에 저장된 값과 데이터베이스 검색 조건이 일치하지 않아 발생한 문제

○ 해결 방법

 auth.middleware.js 수정 전 ▼

const user = await prisma.account.findFirst({
      where: { accountId: +accountId },
    });

 auth.middleware.js 수정 후 ▼

const user = await prisma.account.findFirst({
      where: {
        userId: accountId, // accountId 대신 userId로 검색
      },
    });

- 토큰에서 추출한 accountId를 userId 필드로 검색하도록 변경

- 토큰 생성 시 accountId 대신 userId를 저장하도록 수정

 

- 해결이 완료된 줄 알았으나 또 다른 곳에서 Error가 발생

 

● 최종적으로 해결한 방법

 Error Log ▼

prisma:error 
Invalid `prisma.account.findFirst()` invocation:

{
  where: {
    userId: 2
            ~
  }
}

Argument `userId`: Invalid value provided. Expected StringFilter or String, provided Int.

 - 이번에 오류 발생지는 users.router에서 Error가 발생

 - auth.middleware를 admin 미들웨어에 맞춰서 수정하니 users.router에서 Error가 발생

 

 ○ 해결 방법

 - 단순한 방법이지만 auth.middleware를 두 가지로 정의

 - admin 미들웨어 = adminauth.middleware, users 미들웨어 = auth.middleware

 auth.middleware.js =기존에 쓰던 대로 ▼

const user = await prisma.account.findFirst({
      where: { accountId: +accountId },
    });

 

 adminauth.middleware.js = 위에서 수정한 방법대로 ▼

const user = await prisma.account.findFirst({
      where: {
        userId: accountId, // accountId 대신 userId로 검색
      },
    });

- 두 개의 미들웨어를 분리해서 사용하니 해결완료

 

● 결말

 - 근본적인 Error의 이유는 미들웨어 정의의 문제였었고 단순히 admin과 users의 계정은
   하나만 존재할 것이니 똑같은 작동을 할 줄 알았던 얇게 생각한 것이 원인이었다.

 - 한 개의 미들웨어로 모든 것을 처리하려고 한 것이 문제였었기 때문에 미들웨어를
   각각 admin과 users 따로 정의했고 Error가 해결되었다.