为啥 Keycloak 管理控制台中的密码字段会删除我输入的密码开头和结尾的空格

Posted

技术标签:

【中文标题】为啥 Keycloak 管理控制台中的密码字段会删除我输入的密码开头和结尾的空格【英文标题】:Why does password fields in admin console of Keycloak removes spaces in beginning and end of the password i entered为什么 Keycloak 管理控制台中的密码字段会删除我输入的密码开头和结尾的空格 【发布时间】:2018-09-15 01:55:17 【问题描述】:

我想在管理员在密码字段的开头或结尾输入空格时显示错误消息。但我注意到当我点击重置按钮时返回的密码会自动删除字符串开头或结尾的空格。只检测到中间的空格。

我在 pw 字段上做了一个检查元素,我看到了这条线。

<legend><span class="text ng-binding">Manage Password</span></legend>
<div class="form-group">
<label class="col-md-2 control-label ng-binding" for="newPas">New Password


<span class="required ng-hide" data-ng-show="create">*</span></label>
                        <div class="col-md-6">

<input class="form-control password-conceal ng-not-empty ng-dirty ng-valid-parse 
ng-valid ng-valid-required ng-touched" kc-password="" type="text" id="newPas" 
name="newPas" data-ng-model="password" required="">

但是当我在 keycloak 文件中搜索它时,我发现它们是不同的。

<legend><span class="text">:: 'manage-user-password' | translate</span></legend>
<div class="form-group">
<label class="col-md-2 control-label" for="newPas">:: 'new-password' | translate 

<span class="required" data-ng-show="create">*</span></label>
<div class="col-md-6">

   <input class="form-control" kc-password type="text" 
id="newPas" name="newPas" data-ng-model="password" required>

这里是完整的 html 文件:https://github.com/keycloak/keycloak/blob/master/themes/src/main/resources/theme/base/admin/resources/partials/user-credentials.html

这里是它使用的 angularjs 代码:

$scope.resetPassword = function() 
        // hit enter without entering both fields - ignore
        if (!$scope.passwordAndConfirmPasswordEntered()) return;

        if ($scope.pwdChange) 
            if ($scope.password != $scope.confirmPassword) 
                Notifications.error("Password and confirmation does not match.");
                return;
            
        

        var msgTitle = 'Change password';
        var msg = 'Are you sure you want to change the users password?';

        Dialog.confirm(msgTitle, msg, function() 
            UserCredentials.resetPassword( realm: realm.realm, userId: user.id , 
 type : "password", value : $scope.password, temporary: $scope.temporaryPassword , function() 
                    Notifications.success("The password has been reset  test"+$scope.password); 
//here i confirmed that the returned password automatically removes the spaces in beginning and end. 
Only spaces in between are accepted.


                        $scope.password = null;
                        $scope.confirmPassword = null;
                        $route.reload();
                    );
                , function() 
                    $scope.password = null;
                    $scope.confirmPassword = null;
                );
            ;

            $scope.passwordAndConfirmPasswordEntered = function() 
                return $scope.password && $scope.confirmPassword;
            

这里是完整的 js 脚本:https://github.com/keycloak/keycloak/blob/master/themes/src/main/resources/theme/base/admin/resources/js/controllers/users.js

请帮助我找到keycloak如何删除我在密码开头或结尾输入的空格!谢谢

【问题讨论】:

【参考方案1】:

找到了! 供参考:AngularJS - Remove leading and trailing whitespace from input-box using regex

Angularjs 默认在密码字段中使用 ng-trim = true。 所以我将密码输入设置为 ng-trim = "false" 并且成功了!

【讨论】:

以上是关于为啥 Keycloak 管理控制台中的密码字段会删除我输入的密码开头和结尾的空格的主要内容,如果未能解决你的问题,请参考以下文章

keycloak 8 登录更新密码 ftl 文件未加载

为啥我看不到 Keycloak 发出的 JWT 中的组?

KeyCloak - 入口不允许通过 https 服务连接

为啥 keycloak 隐藏“用户”部分下的“服务帐户管理员 cli”用户?

Keycloak:实现“重置密码”(作为管理员)流程与“忘记密码”(作为用户)相同

Keycloak 账户管理api更新密码不起作用