Closed live-small closed 2 years ago
현재 이메일을 통한 비밀번호 재설정 내부 로직은 다음과 같습니다.
이전 인증관련 리팩토링에서 비밀번호 변경은 필터로 옮길 시 parameter 처리가 어려워져 service단에 그대로 남겨두었습니다.
위의 3번을 실행하기 위해 service 단에서 AuthenticationManager
를 호출하게 되는데, 이 부분에서 문제가 발생하는 것 같습니다.
현재 MemberAuthService
에서 AuthenticationManagerBuilder
를 주입받아 사용하고 있는데 WebSecurityConfig
에서 설정한대로 주입이 진행되지 않고 있습니다. (authenticationManagerBuilder.getObject()
를 호출하면 null
이 반환됩니다.)
따로 Bean 등록 처리를 해주거나,
AuthenticationManager
를 직접 주입해주어도 같은 문제가 발생합니다.
따라서 내부 로직을 위의 1번과 2번만 시행하도록 바꾼 뒤 프론트 단에서 이메일을 통한 비밀번호 재설정 API 호출 -> 성공 시 가지고 있던 새 비밀번호로 로그인 API 호출
하도록 수정하는 방법이 제일 적절해보입니다.
@seonpilKim
혹시 관련된 에러 수정 방법이나 다른 의견이 있을까요? AuthenticationManager
주입이 정상적으로 진행되지 않는데 관련한 자료가 많지 않더라구요..
음.. 일단 AuthenticationManagerBuilder
가 Bean으로 등록되어 있지 않아서 주입이 안되는 것 같고,
따로 Bean으로 등록하는건 어떤 방법으로 하셨는지 모르겠지만, WebSecurityConfigurerAdapter에 보면 AuthenticationManagerBuilder
가 private으로 선언되어 있어서 저희가 설정을 적용한 AuthenticationManagerBuilder
를 가져와서 bean으로 등록할 수 있으면 가능할 것 같긴 한데, 방법은 잘 모르겠네요..
위 내용과는 조금 다른 이야기지만, 다시 생각해보니 filter는 공통적인 로직들만 넣고, 이메일을 통한 비밀번호 재설정
과 같은 로직은 특정 상황에서만 사용되는 로직이니까, filter보다는 api내에 로직을 구현하는 걸로 바꾸는게 어떨까 싶은 생각도 드네요..
AuthenticationManager
가 WebSecurityConfigurerAdapter
에 protected로 생성되어있어 WebSecurityConfig에서 public Bean으로 주입을 해주었는데, 여전히 에러가 발생했습니다. AuthenticationManagerBuilder
의 경우 말씀해주신 대로 private으로 되어있어 방법을 찾지 못했습니다. 이전 서비스단에서 로그인을 구현할 때는 AuthenticationManagerBuilder
가 정상적으로 주입됐습니다. (아마 이때는 커스텀 provider가 없었기 때문에 그런것 같아요)
현재 filter에서 작동하는 인증 과정은
의 4가지가 있습니다. 그 외 이메일을 통한 비밀번호 재설정
로직은 현재 API내에서 작동하고있습니다.
저는 위의 4가지는 모두 인증과정이므로 filter에 있는게 좋을 것 같습니다 ! 위 4가지 중 API단으로 옮겨야된다고 생각하시는 로직이 있을까요?
4가지 그대로 필터에 두는게 좋은 것 같습니다 :)
이메일 코드에 대한 인증은 이미 진행하였으므로 JwtUtil
에서 직접 토큰을 생성하는 방식으로 변경했습니다.
Describe the bug
To Reproduce
request
error message
Expected behavior