refactor UserDetailsService