LSW990918 / NewsFeedProject

0 stars 1 forks source link

JWT Token userId get 방식 #6

Open lovelyunsh opened 8 months ago

lovelyunsh commented 8 months ago

Description

현재 dev branch에 올라온 코드로 회원가입, 로그인이 가능해졌습니다. 다음 단계로 로그인 후 나오는 JWT 토큰에서 userId를 꺼내 post, comment, postLike의 CUD에 사용해야 할 것으로 보입니다.

지금 코드 상으로는 받을 수 있는 정보는 아래와 같습니다. org.springframework.security.core.userdetails.User 라는 security에서 제공하는 객체에 유저 정보가 일부 담겨져 있습니다. User.username -> nickName 값 User.authorities[0].role -> email 값 image

Suggestion

image 현재 저 객체의 정보를 @AuthenticationPrincipal 어노테이션을 이용해 컨트롤러에서 받아올 수 있는데, 여기서 userId를 받기 위해서 3가지 방식이 있을 것 같습니다.

  1. org.springframework.security.core.userdetails.User 객체가 아닌 User 도메인의 User로 바로 받아올 수 있게 수정.
  2. org.springframework.security.core.userdetails.User 객체를 그대로 사용하고 프로퍼티 중 하나에 userId 값을 입력.
  3. 현재 코드를 유지하고 받아온 객체의 email을 이용해 userId 값을 db에서 조회.

이외에 다른 좋은 방안이나 의견 있으시면 제안해주시고, 이 중 더 좋은 방안으로 결정해서 개발 진행하면 될 것 같습니다.

Mhun9799 commented 8 months ago

3가지 방법 중에서는 org.springframework.security.core.userdetails.User 객체의 프로퍼티 중 하나를 userId로 바꾸는 2번 방법이 간편할 것 같은데, 이런 경우 어떤 문제점이 생길지 한번 얘기해보면 좋을 것 같습니다.

다른 1,3번의 경우에도 어떤 문제점이 생길 수 있는지도요.

asd311sw commented 8 months ago

스크린샷 2024-01-11 16-49-47

기존 User클래스 (org.springframework.security.core.userdetails.User) 에 있는 password 프로퍼티에 userId를 추가하는 방법으로 변경했습니다.

lovelyunsh commented 8 months ago

3가지 방법 중에서는 org.springframework.security.core.userdetails.User 객체의 프로퍼티 중 하나를 userId로 바꾸는 2번 방법이 간편할 것 같은데, 이런 경우 어떤 문제점이 생길지 한번 얘기해보면 좋을 것 같습니다.

다른 1,3번의 경우에도 어떤 문제점이 생길 수 있는지도요.

저도 2번이 제일 편할 것 같긴한데 저 객체의 어떤 프로퍼티에 넣어야 맞을지는 좀 더 생각해봐야 할 것 같습니다. 1번 방식의 경우 스프링 시큐리티에서 저런 기능을 제공하는지 알아봐야 하고 개발 복잡성이 늘어날 것 같고, 3번 방식은 db조회가 한번 더 이뤄져야 하는게 단점일 것 같아요

lovelyunsh commented 8 months ago

스크린샷 2024-01-11 16-49-47

기존 User클래스 (org.springframework.security.core.userdetails.User) 에 있는 password 프로퍼티에 userId를 추가하는 방법으로 변경했습니다.

간편하게 쓰기에는 password 프로퍼티에 userId를 담는 것으로 쓰는 것이 좋기는 한데 프로퍼티 명이 맞지 않아 좀 아쉬운 느낌이 있는 것 같습니다.

image 검색을 좀 해보니 UserDetails를 상속 받아 CustomUserDetails를 만들어 사용하는 방식으로도 많이 쓰는 것 같습니다.

참조 링크

우선은 password에 userId를 쓰는 방식으로 사용하고 이후에 변경 해봐도 좋을 것 같습니다.