Kakao 로그인 기능이 추가되어, username과 email 두 가지 방법으로 로그인 할 필요가 생겼다.
이에 세가지 방법을 고려해보았다.
1. 내부에서 `username`과 `email` 두 가지를 검사하도록 하기
2. `UserDetailsService` 클래스를 상속 받는 클래스를 하나 더 만들고, 두 가지를 입력받도록 하기
3. 로그인 방식을 하나로 합치기
여기서 1번 UserRepository 내부에서 username과 email 두 가지를 사용하여 User를 찾도록 하는 방법을 선택하였다.
수정 전, 기존 메서드
UserDetailsImpl.java
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username)
.orElseThrow(() -> new UsernameNotFoundException("Not Found " + username));
return new UserDetailsImpl(user);
}
@Override
public UserDetails loadUserByUsername(String usernameOrEmail) throws UsernameNotFoundException {
User user = userRepository.findByUsernameOrEmail(usernameOrEmail, usernameOrEmail)
.orElseThrow(() -> new UsernameNotFoundException("Not Found " + usernameOrEmail));
return new UserDetailsImpl(user);
}
Username과 Email 두 가지로 로그인하는 방법
Kakao 로그인 기능이 추가되어,
username
과email
두 가지 방법으로 로그인 할 필요가 생겼다. 이에 세가지 방법을 고려해보았다.여기서 1번
UserRepository
내부에서username
과email
두 가지를 사용하여User
를 찾도록 하는 방법을 선택하였다.수정 전, 기존 메서드 UserDetailsImpl.java
수정 후
1. UserRepository에
findByUsernameOrEmail
메서드 추가2. UserDetailsImpl.loadUserByUsername 수정