작업 배경

<aside> ❗

[사용자 조회 api를 만들어야 하는 이유]

스프린트 미션 진행할 때는 사용자 정보 조회 api를 안 만들고 진행했고, (내가) 해당 api를 만들어야 하는 이유를 알 수 없어 chatGPT에게 물어보았다. (…)

[chatGPT의 답변]

인증은 accessToken으로 하지만, 실제 사용자 정보는 전용 API로 가져오는 게 좋다.

  1. 토큰만으로는 사용자 정보가 충분하지 않고
  2. 토큰 위조, 만료, 회원 탈퇴 여부를 BE에서 판단하는 것이 안전하기 때문이다. (=보안) </aside>

진행

// 사용자 id 찾기 -- repository
async function findById(id) {
  return await prisma.user.findUnique({
    where: { id },
    select: {
      id: true,
      email: true,
      nickname: true,
      profileImage: true,
      createdAt: true,
      updatedAt: true,
    },
  });
}

// GET: 사용자 1人 -- service
async function getUser(id) {
  const user = await usersRepository.findById(id);

  if (!user) {
    const error = new Error("해당 사용자를 찾을 수 없습니다.");
    error.code = 404;
    throw error;
  }

  return user;
}

// GET: 사용자 1人 -- controller
usersController.get(
  "/",
  passport.authenticate("access-token", {
    session: false,
    failWithError: true,
  }),
  async (req, res, next) => {
    try {
      const userId = req.user.id;
      const userInfo = await usersService.getUser(userId);

      res.json(userInfo);
    } catch (err) {
      next(err);
    }
  }
);

확인(.http)

### 사용자 정보 조회
GET <http://localhost:3002/api/users>
Content-Type: application/json
Authorization: Bearer 토큰

난점 및 배운 점

<aside>

없음

</aside>