로그인 API 추가하기

val userHashMap = HashMap<UUID, String>()

fun signIn(request: UserSignInRequest): UserSignInResponse {
        val user = userRepository.findByAccountId(request.accountId)
            ?: throw UnAuthorizedException

        if (request.password != user.password) {
            throw UnAuthorizedException
        }

        val randomUUID = UUID.randomUUID()
        userHashMap[randomUUID] = request.accountId

        return UserSignInResponse(randomUUID = randomUUID)
    }
  1. id, password를 검증해서 둘 중 하나라도 실패하면 401을 띄우도록 처리합니다.
  2. UUID를 key로 String을 value로 하는 HashMap 객체 하나를 생성합니다.
  3. HashMap의 key로 고유한 UUID를 넣고 user의 accountId를 value로 넣습니다.
  4. 로그인을 성공하면 고유한 UUID를 return합니다.

Base64 방식 바꿔서 사용하기

fun addTodo(request: AddTodoRequest, httpServletRequest: HttpServletRequest) {
        val userUUID = httpServletRequest.getHeader("Authorization")
        val userAccountId = userHashMap[UUID.fromString(userUUID)]
            ?: throw UnAuthorizedException

        val user = userRepository.findByAccountId(userAccountId)
            ?: throw UserNotFoundException

        todoRepository.save(
            TodoEntity(
                title = request.title,
                content = request.content,
                isCompleted = false,
                user = user,
            )
        )
    }
  1. Authorization이라는 key의 header에 고유한 문자열을 넘겨줍니다
  2. accountId를 UUID를 이용해서 찾습니다.

스크린샷 2023-08-02 오전 12.12.23.png

스크린샷 2023-08-02 오전 12.12.07.png

로그인을 한 뒤 발급받은 UUID로 Authorization Header에 넘기면 성공하는걸 확인할 수 있습니다.