[Project_] Item-Simulator [Trouble Shooting]
권한 미들웨어 설정 문제
● 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가 해결되었다.