2016-12-18 5 views
0

BCryptを使用する際に問題があります。 私は安全な方法でユーザーパスワードを保存したいので、暗号化されたパスワードを格納するためにSpringのBCryptを使用しています。 私が直面している問題は、BCryptがランダムな塩を生成することです。もちろん、パスワードは解読できません。 しかし、どうすればログインを処理できますか?Bcryptを使用してパスワードを保存および読み取る方法

private PasswordEncoder encoder = new BCryptPasswordEncoder(); 

public String encryptPassword(String password) { 
     String encryptedValue = encoder.encode(password); 
     Assert.isTrue(encoder.matches(password, encryptedValue)); 
     return encryptedValue; 
} 

ユーザーが資格情報を入力しているときにパスワードが一致していることを確認するには何が必要ですか?

String encryptedPassword = encryptionGenerator.encryptPassword(loginCredentials.getPassword()); 

そして、私は、ユーザーがエンコードされたパスワードを検証するために、再度パスワードをエンコードする必要はありません彼の資格情報を入力されたときに、パスワードが一致していることを確認するために休止状態

FROM Login WHERE email = :email AND password = :password AND email_confirmed = 1" 

答えて

1

でDBから読み取るしようそれはあなたがデータベースから得たものです。

BCryptPasswordEncoderクラスは、文字列値でのみパスワードと一致します。

私は次の方法で試してみました。あなたの懸念は、ユーザーを認証するためにある場合は、以下の方法で試してみてください。

@Autowired 
UserRepository userRepository; 

public void validateUser(User user) { 

    // get User entity from database using your user repository 
    final User currentUser = userRepository.findByEmailId(user.getUserName()); 

    final BCryptPasswordEncoder pwEncoder = new BCryptPasswordEncoder(); 
    if (pwEncoder.matches(user.getPassword(), currentUser.getPassword())) { 
     // user password is correct 
    } 
    else{ 
     //user password incorrect 
    } 

} 



public interface UserRepository extends JpaRepository<User, Long>{ 

     @Query("FROM Login WHERE emailId = :emailId") 
     User findByEmailId(@param("emailId") String emailId); 
    } 

+0

ありがとうございました!それが私の問題を解決しました。時には私は盲目です – Kahuna

関連する問題