I use Spring security. Is there a way to log in using email instead of a username in Spring security?
Advertisement
Answer
You need an “email” parameter in your login form
<input type="email" name="email">
Then let your custom WebSecurityConfigurerAdapter know that “email” is a principal parameter now
protected void configure(HttpSecurity http) throws Exception { http .formLogin() .loginPage("/login") .usernameParameter("email") .permitAll() .and() .logout() .permitAll(); }
Finally, override loadUserByUsername() in your UserDetailsService implementation
@Override public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { User user = userRepo.findByEmail(email); if (user == null) { throw new UsernameNotFoundException("Not found!"); } return user; }