2017-09-07 6 views
0

私のコードの下にある春のボットの両方で電話と電子メールでログインユーザ用のUserDetailsSerivce実装クラスをカスタマイズする方法を教えてください。 パターンマッチングが必要ですか? ユーザーは電話と電子メールの両方にログインできます。たぶん、このようなログインユーザのためのUserDetailsS​​erivce実装クラスを電話と電子メールでカスタマイズする方法

@Service 
public class JwtUserDetailsServiceImpl implements UserDetailsService { 

    @Autowired 
    private UserRepository userRepository; 

    //user can login both email and phone 

    @Override 
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
     User user = userRepository.findByUsername(username); 

     if (user == null) { 
      throw new UsernameNotFoundException(String.format("No user found with username '%s'.", username)); 
     } else { 
      return JwtUserFactory.create(user); 
     } 
    } 
} 

public interface UserRepository extends JpaRepository<User, Long> { 

    User findByUsername(String username); 
    User findByEmail(String email); 
    User findByPhone(long phone); 
} 
+0

誰かが返信してください – Rahul

答えて

2

Optional<User> findByEmail(String email); 
Optional<User> findByPhone(String phone); 

@Override 
public UserDetails loadUserByUsername(String input) throws UsernameNotFoundException { 

    return userRepo.findByEmail(input) 
      .map(user -> new User(
        user.getName(), 
        user.getPassword(), 
        user.getRoles())) 
      .orElse(userRepo.findByPhone(input) 
        .map(user -> new User(
          user.getName(), 
          user.getPassword(), 
          user.getRoles()) 
        ).orElseThrow(() -> new UsernameNotFoundException("User not found!")) 
      ); 
} 

を?:別のアプローチ - findByPhone - 私たちは、電子メールを見つけた場合は、その後findByEmailか、他を使用し、regexで入力を確認してください。

+0

返信はCepr0 thanxですが、私はfindByEmail(String email)を呼び出さなければならないということに基づいて、ユーザー入力が電話か電子メールかどうか調べることができます。 またはfindByPhone(長距離電話)。 – Rahul

+0

私のコードでは必要ありません - もしあなたが 'findByEmail(入力)'で見つからなければ 'findByPhone(入力)'でユーザーを見つけようとします。else - 例外をスローします.. – Cepr0

+0

@Rahulは更新された答えを見る - できます正規表現を使用して電子メールやその他の情報を調べる – Cepr0

関連する問題