带有maven依赖项的Java "keycloak-admin-cli“
我有这样的代码:
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就是没有更新。
谁能给我举个例子,如何检查旧密码并将其更改为另一个密码?thx
发布于 2021-07-26 13:35:03
尝试使用UserResource而不是UserRepresentation。
应该可以使用userResource.get(userId).credentials()而不是userRepresentation.getCredentials(),但它确实感觉更像是一种变通方法。
从2021年7月26日起,getCredentials始终返回null。
发布于 2020-11-10 17:38:12
要更新密码,请使用:
userRessource.get(userId).resetPassword(credential);请参阅此示例:https://gist.github.com/thomasdarimont/0c136d0b8d339b997928e9bef225f941
但是为了检查实际的凭据,我没有设法检查是否有一个凭据,正如您所说的那样,userRepresentation.getCredentials()始终为空,即使在重置新密码之后也是如此。
https://stackoverflow.com/questions/64726445
复制相似问题