Skip to content

로그인 정보 사용 방법 #35

@geonjunk

Description

@geonjunk

현재 상황

  • 모든 API에 대해 로그인여부 상관없이 접근 권한을 열어주고 테스트를 했습니다.
  • 이러한 상황에서 로그인 관련 모든기능이 구현 완료되었습니다.

제시하는 방법

  • 이제 로그인정보가 사용가능하기 때문에 API 호출시 로그인한 유저 정보가 필요한 경우 query로 가져오는 방식이 아닌
  • @AuthenticationPrincipal 을 이용해 controller 단에서 받아옵니다.

@AuthenticationPrincipal

  • 로그인 성공(인증 성공)한 멤버 정보(UserDetails)를 받기 위한 어노테이션 입니다.
  • 로그인한 유저정보가 필요한 경우 사용합니다

구현 예시

  • 예를 들어 제가 구현한 마이페이지입니다.
  • MemberController의 일부 코드입니다.
@GetMapping("")
fun getMyPageInfo(@AuthenticationPrincipal authMemberDTO: AuthMemberDTO?): ResponseMyPageDTO {
    return memberService.getMyPageInfo(authMemberDTO?.memberId)
}
  • 이런식으로 로그인한 멤버면 매 요청마다 AuthMemberDTO 형태로 현재 로그인한 멤버 정보를 받아올 수 있습니다.
  • 로그인한 유저의 memberId가 필요했기 때문에 authMemberDTO에서 가져와서 사용합니다.

참고사항 - postman 테스트 시

  • postman에서 로그인 사용자로 API를 호출하는 방법을 제시합니다.

  • 먼저 인증할 회원을 회원가입 API로 생성합니다.

    image

  • 이후 호출하고 싶은 API의 Authorizattion 탭에 들어갑니다.

    image

  • type을 Basic Auth로 설정하고 아까 회원가입 API로 생성한 id, 비밀번호를 입력합니다.

    image

  • 이후에 API를 호출하면 정상적으로 로그인한 상태로 API를 호출할 수 있습니다.

참고사항 - 테스트 코드 작성시

  • 로그인이 필요한 API의 테스트코드를 작성할때는 MockUser를 생성해야합니다.
  • 현재는 제가 Factory 클래스로 MockCustomUser를 생성해놓았습니다.
  • 따라서, 로그인 정보가 필요한 테스트코드 메서드에 @WithMockCustomUser 어노테이션만 추가하시면 테스트가 가능합니다.
  • Mockuser의 관련된 정보는 WithMockCustomUserSecurityContextFactory 클래스에서 확인하실 수 있습니다.

구현 예시

  • 제가 구현한 password 변경 테스트 코드입니다.

    @Test
    @DisplayName("MyPage Password Update Success Test")
    @WithMockCustomUser
    fun updatePasswordSuccessTest(){
        val requestBody=RequestUpdatePasswordDTO("test123","1234")
    
        val content: String = objectMapper.writeValueAsString(requestBody)
        mockMvc.perform(
            put("/members/password")
                .contentType(MediaType.APPLICATION_JSON)
                .content(content))
            .andDo { println() }
            .andExpect(status().isCreated)
    }
    • 이런식으로 어노테이션 추가만 하시면 로그인 정보를 이용한 API를 테스트 하실 수 있습니다.

참고자료

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions