I'm looking for a way to use email / password as authentication and not the default login(username) / password.
I'm using spring security oauth2.
Would this be possible? I do allow change email for the user.
Google was not my friend.
Nor was my code hacking: When putting the same email in the login-column I got authentication errors
JHipster Lite ⚡ is a development platform to generate, develop & deploy modern web applications & microservices architecture, step by step.
Found the('mine') solution in 'com.example.myjhipster.security.UserDetailsService'
@Override
@Transactional
public UserDetails loadUserByUsername(final String login) {
log.debug("Authenticating {}", login);
String lowercaseLogin = login.toLowerCase();
// Optional<User> userFromDatabase = userRepository.findOneByLogin(login);
Optional<User> userFromDatabase = userRepository.findOneByEmail(login);
return userFromDatabase.map(user -> {
if (!user.getVerified()) {
throw new UserNotActivatedException("User " + lowercaseLogin + " was not activated");
}
List<GrantedAuthority> grantedAuthorities = user.getAuthorities().stream()
.map(authority -> new SimpleGrantedAuthority(authority.getName()))
.collect(Collectors.toList());
// return new org.springframework.security.core.userdetails.User(lowercaseLogin,
return new org.springframework.security.core.userdetails.User(user.getLogin(),
user.getPassword(),
grantedAuthorities);
}).orElseThrow(() -> new UsernameNotFoundException("User " + lowercaseLogin + " was not found in the database"));
}
This is perhaps a bit too late, but here is a solution that would understand both login and email.
@Override
@Transactional
public UserDetails loadUserByUsername(final String login) {
log.debug("Authenticating {}", login);
String lowercaseLogin = login.toLowerCase(Locale.ENGLISH);
User user = userRepository.findOneByLogin(lowercaseLogin)
.map(Optional::of)
.orElse(userRepository.findOneByEmail(lowercaseLogin))
.orElseThrow(() -> new UsernameNotFoundException("User " + lowercaseLogin + " was not found in the " + "database"));
if (!user.getActivated()) {
throw new UserNotActivatedException("User " + lowercaseLogin + " was not activated");
}
List<GrantedAuthority> grantedAuthorities = getGrantedAuthorities(user);
return new org.springframework.security.core.userdetails.User(user.getLogin(),
user.getPassword(),
grantedAuthorities);
}
private List<GrantedAuthority> getGrantedAuthorities(User user) {
return user.getAuthorities().stream()
.map(authority -> new SimpleGrantedAuthority(authority.getName()))
.collect(Collectors.toList());
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With