У меня есть следующий код для передачи зашифрованного пароля и сохранения в базе данных:
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashPassword = passwordEncoder.encode("admin");
Я получаю результат и сохраняю в базе данных, но когда я пытаюсь войти в свой UserDetailsService
, у меня возникаютследующие проблемы:
Если я попытаюсь передать пароль пользователя напрямую, у меня появится следующее сообщение:
return new User(user.getEmail(),user.getPassword(), getPermissions(user));
Не существует сопоставленного PasswordEncoder для идентификатора «ноль»
Если я добавлю passwordEncoder следующим образом:
@Autowired
private PasswordEncoder passwordEncoder;
//add the passwordEnconder
return new User(user.getEmail(), passwordEncoder.encode(user.getPassword()), getPermissions(user));
У меня возникнет следующая проблема:
Устранено исключение, вызванное выполнением обработчика: ошибка= "invalid_grant", error_description = "Неверные учетные данные"
Но если получить passwordEnconder и ввести пользователя с паролем, как показано ниже, у меня будет успех:
//success code
return new User(user.getEmail(),passwordEncoder.encode("admin"), getPermissions(user));
Так какя могу сгенерировать действительный пароль для сохранения в базе данных?
Мой метод с кодом успеха:
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
Optional<User> userOptional = repository.findByEmail(email);
User user = userOptional.orElseThrow(() -> new UsernameNotFoundException("Usuário e/ou senha incorretos"));
return new org.springframework.security.core.userdetails.User(user.getEmail(),passwordEncoder.encode("admin"), getPermissions(user));
}