Как правильно реализовать UserDetailsService без имени пользователя? - PullRequest
0 голосов
/ 11 января 2020

Я создаю службу oauth в spring-boot и хочу использовать информацию пользователя из MariaDB для аутентификации. При реализации UserDetailsService я должен переопределить функцию loadUserByUsername. Проблема в том, что моя модель пользователя не имеет поля username, вместо этого я хочу загрузить пользователей, используя их почтовый адрес. Итак, мой вопрос: как правильно реализовать UserDetailsService без имени пользователя?

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Тогда почтовый адрес будет именем пользователя.

Это просто текстовое значение , которое однозначно идентифицирует пользователя с доменом. Это может быть:

  • логин (домен: приложение)
  • адрес электронной почты (домен: глобальный)
  • SSN (домен: резидент США)
  • идентификатор студента (домен: школа)
  • идентификатор сотрудника (домен: компания)
  • идентификатор игрока (домен: игровой сайт)
  • или что вы хотите, чтобы оно было

, пока оно есть уникальный, так что loadUserByUsername может найти ровно одну запись.

0 голосов
/ 11 января 2020

Вариант 1: вам может понадобиться передать emailId в имени пользователя и поле и использовать emailId для проверки в вашем пользовательском UserDetailsService

Вариант 2, вам нужно иметь некоторое сопоставление, с помощью которого вы можете получить emailId из поле имени пользователя.

@Component
public class AppUserDetailsService implements UserDetailsService{


    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
        User user = userRepository.findByEmailId(s.toLowerCase());
        if(user == null) {
            throw new UsernameNotFoundException(String.format("The username %s doesn't exist", s));
        }

        List<GrantedAuthority> authorities = new ArrayList<>();
        authorities.add(new SimpleGrantedAuthority("STANDARD_USER"));

        UserDetails userDetails = new org.springframework.security.core.userdetails.User(user.getEmailId(), user.getPassword(), authorities);

        return userDetails;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...