密码输入框在弹出密码保险箱并自动填充密码后，会自动清空密码
=============================

#### 问题现象

首次登录账号输入密码后，弹出密码保险箱后密码被保存到密码保险箱。重新登录时，输入账号后，在点击密码输入框时弹出密码保险箱自动填充密码，填充完成后焦点回到密码输入框，刚刚填充的密码被清空。

#### 背景知识

*   [文本输入 (TextInput/TextArea)](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-common-components-text-input)：TextInput、TextArea是输入框组件，用于响应用户输入，比如评论区的输入、聊天框的输入、表格的输入等，也可以结合其它组件构建功能页面，例如登录注册页面。具体用法请参考[TextInput](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-textinput)、[TextArea](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-textarea)。
*   [焦点事件](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-focus-event#onfocus)：焦点事件指页面焦点在可获焦组件间移动时触发的事件，组件可使用焦点事件来处理相关逻辑。

#### 问题定位

1.  使用DevEco Testing For Device工具中的UIViewer查看页面布局，可以看到密码输入框使用的是TextInput组件。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/2c/v3/zhWgf_vgSVGgGhgFcbHw4g/zh-cn_image_0000002658969077.png?HW-CC-KV=V1&HW-CC-Date=20260709T134025Z&HW-CC-Expire=86400&HW-CC-Sign=54A40FFF778ED147D0D8D271737E46FA24D7787A8FB77620B350E2C72A3F8810 "点击放大")
    
2.  分析清空密码时的相关日志，没有打印明显清空密码的操作，打印了输入框获焦的日志，如下：
    
    C0391C/应用包名/AceFocus  应用包名  I     \[(100000:100000:scope)\] WinFocusMove end, NULL/secure\_field onBlur, TextInput/secure\_field onFocus, start: 1, end: 1, update: 2
    
3.  并且在手动输入密码，然后焦点切到账号输入框，再切回密码输入框，刚刚输入的密码被清空，说明是TextInput控件在获取焦点后密码被自动清空。
4.  分析应用代码，应该是给密码输入框设置了通用的焦点事件，在获取焦点时对输入框内容做了重置操作。如下代码所示：
    
    @Entry
    @Component
    struct Index {
      @State text: string = '';
      controller: TextInputController = new TextInputController();
    
    
      build() {
        Row() {
          Column() {
            TextInput({ text: this.text, placeholder: '', controller: this.controller })
              .type(InputType.Password)
              .onFocus(() => {
              _  // 绑定通用事件，输入框获焦时触发该回调，对输入框内容做了重置。_
                console.info('onFocus is triggering')
                this.text = '';
              })
          }.width('100%')
        }
        .height('100%')
      }
    }
    

#### 分析结论

给密码输入框设置了通用的onFocus焦点事件，在获取焦点时对输入框内容做了重置操作。

#### 修改建议

1.  如果考虑高度安全性，不想使用密码保险箱的密码，可以禁用密码箱：不要将密码TextInput输入框的type属性设置为InputType.Password或InputType.NEW\_PASSWORD。
2.  正常场景密码输入框在获取焦点后无需重置输入内容。