首页 > 其他分享 >鸿蒙 Next 密码自动填充服务实战:构建安全登录模块

鸿蒙 Next 密码自动填充服务实战:构建安全登录模块

时间:2024-11-06 22:08:39浏览次数:1  
标签:用户名 填充 登录 top Next 密码 鸿蒙 margin

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前 API12)在开发多语言电商平台方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

在当今数字化时代,用户对于应用的安全性和便捷性要求越来越高。密码自动填充服务作为鸿蒙 Next 系统的一项重要安全特性,能够极大地提升用户登录体验,同时保障账号密码的安全管理。本文将通过一个实战案例,详细介绍如何在鸿蒙 Next 应用中构建安全登录模块,充分利用密码自动填充服务的功能。

一、项目准备与环境搭建

(一)创建鸿蒙 Next 项目

首先,我们需要使用鸿蒙 Next 的开发工具创建一个新的项目。在创建过程中,选择合适的项目模板,例如“Empty Ability”模板,它提供了一个基础的项目结构,方便我们进行后续的开发。

(二)导入相关依赖

为了实现密码自动填充服务,我们需要导入相关的依赖库。在鸿蒙 Next 中,主要涉及到 ArkUI 相关的组件库以及密码保险箱相关的安全库。在项目的配置文件(如build.gradlemodule.json5)中,添加相应的依赖项,确保项目能够正确引用这些库。例如:

dependencies {
    implementation 'ohos.arkui:arkui-framework:1.0.0'
    implementation 'ohos.security:password-vault:1.0.0'
}

这里的版本号仅为示例,实际开发中应根据鸿蒙 Next 的官方文档和项目需求选择合适的版本。

二、登录页面布局设计

(一)使用 ArkUI 组件构建界面

使用 ArkUI 组件来构建登录页面的用户界面。首先,创建一个Column组件作为页面的容器,然后在其中添加Text组件用于显示页面标题,如“登录”。接着,添加两个TextInput组件,分别用于输入用户名和密码。例如:

import { Column, Text, TextInput } from '@ohos.arkui';

@Entry
@Component
struct LoginPage {
    build() {
        Column() {
            Text('登录')
             .fontSize(24)
             .fontWeight(FontWeight.Bold)
             .margin({ top: 20 })
            TextInput({ placeholder: '请输入用户名' })
             .width('90%')
             .height(40)
             .margin({ top: 20 })
            TextInput({ placeholder: '请输入密码' })
             .width('90%')
             .height(40)
             .margin({ top: 10 })
        }
    }
}

(二)确保输入框符合密码自动填充要求

为了使密码自动填充功能正常工作,需要确保用户名和密码输入框的属性设置正确。对于用户名输入框,将其type属性设置为InputType.USER_NAME;对于密码输入框,将其type属性设置为InputType.PASSWORD,并且确保enableAutoFill属性为true(默认即为true)。例如:

TextInput({ placeholder: '请输入用户名' })
 .width('90%')
 .height(40)
 .margin({ top: 20 })
 .type(InputType.USER_NAME)
TextInput({ placeholder: '请输入密码' })
 .width('90%')
 .height(40)
 .margin({ top: 10 })
 .type(InputType.PASSWORD)
 .enableAutoFill(true)

三、实现密码自动填充功能

(一)处理登录页面的自动填充逻辑

在登录页面的代码中,需要处理密码自动填充的逻辑。当用户首次点击用户名或密码输入框时,系统会触发自动填充弹窗。我们需要监听这个事件,并在弹窗出现时,根据用户选择填充相应的用户名和密码。例如:

import { TextInput, InputType, onAutoFill } from '@ohos.arkui';

@Entry
@Component
struct LoginPage {
    @State username: string = '';
    @State password: string = '';

    build() {
        Column() {
            Text('登录')
             .fontSize(24)
             .fontWeight(FontWeight.Bold)
             .margin({ top: 20 })
            TextInput({ placeholder: '请输入用户名', text: this.username })
             .width('90%')
             .height(40)
             .margin({ top: 20 })
             .type(InputType.USER_NAME)
             .onAutoFill((event: AutoFillEvent) => {
                    this.username = event.value;
                })
            TextInput({ placeholder: '请输入密码', text: this.password })
             .width('90%')
             .height(40)
             .margin({ top: 10 })
             .type(InputType.PASSWORD)
             .enableAutoFill(true)
             .onAutoFill((event: AutoFillEvent) => {
                    this.password = event.value;
                })
        }
    }
}

在上述代码中,通过onAutoFill事件监听器,当自动填充事件触发时,将填充的值赋给相应的状态变量(usernamepassword),以便在后续的登录逻辑中使用。

(二)与密码保险箱集成

为了实现与密码保险箱的集成,需要使用密码保险箱提供的 API 来进行操作。首先,检查密码保险箱是否已保存当前应用的用户名和密码。如果已保存,则在登录页面加载时,自动填充用户名和密码输入框。例如:

import { passwordVault } from '@ohos.security';

async function checkAndFillCredentials() {
    const savedCredentials = await passwordVault.getSavedCredentials('your_app_package_name');
    if (savedCredentials) {
        this.username = savedCredentials.username;
        this.password = savedCredentials.password;
    }
}

@Entry
@Component
struct LoginPage {
    @State username: string = '';
    @State password: string = '';

    aboutToAppear() {
        checkAndFillCredentials();
    }

    build() {
        // 登录页面布局代码
    }
}

在上述代码中,checkAndFillCredentials函数用于检查密码保险箱中是否保存了当前应用的账号密码。如果有保存,则将其填充到登录页面的输入框中。

四、处理注册与密码更新功能

(一)注册页面的强密码生成与保存

在注册页面中,除了常规的用户名和密码输入框外,还需要实现强密码生成功能。根据密码自动填充服务的规则,为新密码输入框设置合适的passwordRules属性,以确保生成的密码符合强度要求。例如:

TextInput({ placeholder: '请输入新密码' })
 .width('90%')
 .height(40)
 .margin({ top: 10 })
 .type(InputType.NEW_PASSWORD)
 .enableAutoFill(true)
 .passwordRules('begin:[upper],special:[yes],len:[maxlen:32,minlen:12]')

当用户点击注册按钮时,首先验证用户名和密码的合法性,然后将用户名和密码保存到密码保险箱中。例如:

import { passwordVault } from '@ohos.security';

async function registerUser(username: string, password: string) {
    // 验证用户名和密码的合法性
    if (isValidUsername(username) && isValidPassword(password)) {
        await passwordVault.saveCredentials('your_app_package_name', { username, password });
        console.log('注册成功,账号密码已保存到密码保险箱。');
    } else {
        console.log('注册失败,用户名或密码不合法。');
    }
}

@Entry
@Component
struct RegisterPage {
    @State newUsername: string = '';
    @State newPassword: string = '';

    build() {
        Column() {
            Text('注册')
             .fontSize(24)
             .fontWeight(FontWeight.Bold)
             .margin({ top: 20 })
            TextInput({ placeholder: '请输入用户名', text: this.newUsername })
             .width('90%')
             .height(40)
             .margin({ top: 20 })
             .type(InputType.USER_NAME)
            TextInput({ placeholder: '请输入新密码', text: this.newPassword })
             .width('90%')
             .height(40)
             .margin({ top: 10 })
             .type(InputType.NEW_PASSWORD)
             .enableAutoFill(true)
             .passwordRules('begin:[upper],special:[yes],len:[maxlen:32,minlen:12]')
            Button('注册')
             .width('90%')
             .height(40)
             .margin({ top: 20 })
             .onClick(() => {
                    registerUser(this.newUsername, this.newPassword);
                })
        }
    }
}

(二)修改密码时的密码更新操作

在修改密码页面,需要先验证用户的身份(如通过输入旧密码进行验证),然后允许用户输入新密码。当用户点击保存密码按钮时,更新密码保险箱中的密码记录。例如:

import { passwordVault } from '@ohos.security';

async function updatePassword(oldPassword: string, newPassword: string) {
    // 验证旧密码是否正确
    if (await passwordVault.verifyCredentials('your_app_package_name', { password: oldPassword })) {
        await passwordVault.updateCredentials('your_app_package_name', { password: newPassword });
        console.log('密码更新成功。');
    } else {
        console.log('旧密码错误,密码更新失败。');
    }
}

@Entry
@Component
struct ChangePasswordPage {
    @State oldPassword: string = '';
    @State newPassword: string = '';

    build() {
        Column() {
            Text('修改密码')
             .fontSize(24)
             .fontWeight(FontWeight.Bold)
             .margin({ top: 20 })
            TextInput({ placeholder: '请输入旧密码', text: this.oldPassword })
             .width('90%')
             .height(40)
             .margin({ top: 20 })
             .type(InputType.PASSWORD)
            TextInput({ placeholder: '请输入新密码', text: this.newPassword })
             .width('90%')
             .height(40)
             .margin({ top: 10 })
             .type(InputType.NEW_PASSWORD)
             .enableAutoFill(true)
             .passwordRules('begin:[lower],special:[yes],len:[maxlen:32,minlen:12]')
            Button('保存密码')
             .width('90%')
             .height(40)
             .margin({ top: 20 })
             .onClick(() => {
                    updatePassword(this.oldPassword, this.newPassword);
                })
        }
    }
}

五、优化与适配

(一)针对不同场景进行适配

  1. 多种登录方式适配
    如果应用支持多种登录方式,如用户名密码登录、手机号验证码登录等,需要针对不同登录方式进行适配。对于用户名密码登录,确保密码自动填充功能正常工作;对于手机号验证码登录,可能需要隐藏密码自动填充相关的界面元素,以避免用户混淆。
  2. 不同设备类型适配
    考虑到应用可能在不同类型的设备上运行,如手机、平板等,需要进行界面适配。在平板设备上,可能需要调整登录页面的布局,使其更适合大屏幕显示,确保输入框和按钮的大小、位置合理,方便用户操作。

(二)测试与问题排查

  1. 功能测试
    进行全面的功能测试,包括正常登录、注册、密码更新流程的测试,以及各种边界情况的测试。例如,测试用户名和密码的最大长度限制、特殊字符的处理、密码自动填充的准确性等。
  2. 兼容性测试
    在不同型号的设备上进行测试,确保应用在各种硬件和软件环境下都能正常运行。注意检查不同版本的鸿蒙 Next 系统对密码自动填充服务的支持情况,及时发现并解决兼容性问题。
  3. 安全测试
    对登录模块进行安全测试,模拟各种攻击场景,如密码暴力破解、中间人攻击等,确保密码自动填充服务和整个登录模块的安全性。检查密码在传输和存储过程中是否加密,密码保险箱的访问控制是否严格等。

通过以上实战步骤,我们成功构建了一个基于鸿蒙 Next 密码自动填充服务的安全登录模块。在实际应用开发中,我们可以根据具体需求进一步扩展和优化登录模块的功能,为用户提供更加安全、便捷的登录体验。同时,持续关注鸿蒙 Next 系统的更新和安全补丁,及时更新应用,确保密码管理的安全性和稳定性。

标签:用户名,填充,登录,top,Next,密码,鸿蒙,margin
From: https://www.cnblogs.com/samex/p/18531165

相关文章

  • 鸿蒙Next如何接入微信支付
    大家好,这是我工作中接触到的鸿蒙Next接入微信支付,有使用到,分享给大家,轻松便捷前提:你已有鸿蒙版本的微信,并且微信余额或绑定银行卡有钱,因为内测的微信暂不支持收红包和转账,2.你的应用已有安卓或IOS端的微信支付,否则的话,工作量将不止如此正文:首先需要你公司这边去申请开通鸿蒙......
  • Next 设置字体文件cdn 或者本地
    @font-face{font-family:'font-ali-bold';src:url('https://cdnurl/Alibaba-PuHuiTi-Bold.woff2')format('woff2');font-weight:normal;font-style:normal;}tailwind设置fontFamily 直接使用变量,  直接在className上写  font......
  • 安卓端和鸿蒙性能测试环境脚本-sh+python
    背景:做安卓和鸿蒙性能测试,需要搭建环境,把常用的几个pip包和虚拟环境等记录一下,在新的电脑上可以快速安装(仅作为个人记录)准备工作mac电脑python版本>=3.7.9sh脚本#!/usr/local/bin/bash##########################################################################Fil......
  • 鸿蒙开发进阶(HarmonyOS )FileUri开发指南(C/C++)
     鸿蒙NEXT开发实战往期必看文章:一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)场景介......
  • 鸿蒙开发进阶(HarmonyOS)时域可分层视频编码
     鸿蒙NEXT开发实战往期必看文章:一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)基础概......
  • 鸿蒙开发进阶(OpenHarmony)扩展组件-系统调用
    鸿蒙NEXT开发实战往期必看文章:一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)基本概念......
  • 华为大气啊!HarmonyOS NEXT公测发福利~这个可以有
    HarmonyOSNEXT火热公测中,首批100万名公测用户速来领取多重权益!华为视频、华为阅读、音乐、主题、云空间、天际通等应用会员一应俱全;还有爱奇艺、哔哩哔哩、芒果TV、WPS、喜马拉雅、优酷六大应用的会员季卡6选2,这一波不得不说华为大气!......
  • 鸿蒙HarmonyOS(ArkUI基础-3)
    文章目录ArkUI(方舟UI框架)1.简介2.基本概念3.概述4.布局1.概述......
  • 鸿蒙 Next 实战:构建安全高效的在线支付应用
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)在开发多语言电商平台方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在数字化金融......
  • 鸿蒙开发——进程模型与进程通信
    1、进程模型❓什么是进程?进程是一个正在执行的程序的实例。当我们启动一个程序时,操作系统会创建一个进程,分配给它所需的资源,如内存和CPU时间。每个进程至少有一个线程,即执行线程,负责执行程序的指令。进程是操作系统进行资源分配和调度的基本单位,是操作系统提供给用户和应用......