具有 maven 依赖项“keycloak-admin-cli”的 Java
我有这个代码:
keycloakService.findUserByEmailOrUsername( user.getKeycloakUsername() )
.ifPresent( userRepresentation -> {
//Check for old password
if ( userRepresentation.getCredentials() != null ) {
for (CredentialRepresentation c : userRepresentation.getCredentials()) {
if ( CredentialRepresentation.PASSWORD.equals( c.getType() ) ) {
if ( userDTO.getOldpassword().equals( c.getValue() ) ) {
//Das alte Passwort stimmt mit dem in der Datenbank überein. Wir können updaten
//Neues Passwort setzen
CredentialRepresentation credential = new CredentialRepresentation();
credential.setType( CredentialRepresentation.PASSWORD );
credential.setValue( userDTO.getPassword() );
credential.setTemporary( false );
userRepresentation.setCredentials( Collections.singletonList( credential ) );
} else {
throw new RuntimeException( "Your current password does not match", null );
}
}
}
}
} );
我检查了调试器,得到了正确的用户。 “userRepresentation”不为空。 但用户的凭据始终为空。
此外,如果我只想为用户设置一个新密码,它不会更新:
keycloakService.findUserByEmailOrUsername( user.getKeycloakUsername() )
.ifPresent( userRepresentation -> {
CredentialRepresentation credential = new CredentialRepresentation();
credential.setType( CredentialRepresentation.PASSWORD );
credential.setValue( userDTO.getPassword() );
credential.setTemporary( false );
userRepresentation.setCredentials( Collections.singletonList( credential ) );
} );
我没有收到错误消息,keycloak 只是没有更新。
谁能告诉我如何检查旧密码并将其更改为另一个密码的示例?谢谢
最佳答案
尝试使用 UserResource 而不是 UserRepresentation。
userResource.get(userId).credentials()
而不是 userRepresentation.getCredentials()
应该可以工作,但感觉更像是一种解决方法。
自 2021 年 7 月 26 日起,getCredentials 始终返回 null。
关于java - keycloak:检查旧密码是否匹配,如果是则更改为另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64726445/