一、前言

在鸿蒙OS开发过程中,随着应用规模的扩大,登录状态管理逐渐成为系统设计中的一个挑战。一个清晰、高效的登录状态管理系统不仅可以简化开发流程,还能提升用户体验。本文将分享一种优雅的登录状态管理设计方案,帮助开发者轻松应对复杂系统中的登录状态控制。

二、认证事件与认证代码设计

认证事件是应用全局事件的核心,它触发登录或退出操作,并可在整个项目中进行广播。我们定义了三种基本的认证事件:启动认证、登录认证和退出认证。

认证事件代码示例:

export class AuthenticationEvent {
static readonly AppStart = "$AppStart$";
static readonly LogIn = "$LogIn$";
static readonly LogOut = "$LogOut$";
}

三、认证状态

用户认证状态是系统判断用户是否登录的关键。我们定义了两种状态:认证成功和未认证。

认证状态代码示例:


export const AUTHENTICATION_STATE:string = "$AuthenticationState$" // 认证状态 
export class AuthenticationState {} // - authenticated - 认证成功
export class AuthenticationAuthenticated extends AuthenticationState {} // - unauthenticated - 未认证
export class AuthenticationUnauthenticated extends AuthenticationState {}

四、认证接口模板

认证接口是登录状态管理的具体实现,包括token的检查、保存和删除,以及认证成功和未认证时的页面跳转。

认证接口代码示例:

const TOKEN = "token";

export abstract class IUserAuthentication {
libPreferencesSync: LibPreferencesSync; hasToken(): boolean {
return this.libPreferencesSync.getValue(TOKEN).toString().length > 0;
} saveToken(token: string) {
this.libPreferencesSync.saveKeyValue(TOKEN, token);
} deleteToken() {
this.libPreferencesSync.deleteData(TOKEN);
} abstract authPage(): void;
abstract unAuthPage(): void;
}

五、管理登录状态的页面

通过事件中心(eventHub),我们可以在整个应用中进行全局状态通知。登录状态管理器根据用户发送的事件来改变认证状态。

登录状态管理器代码示例:


export class Authentication{
// 私有静态变量,用于保存单例对象
private static _instance :Authentication; // 私有构造函数,防止外部直接实例化
private constructor() {
// 构造函数内容
} // 静态方法,用于获取单例对象
public static getInstance() {
if (!Authentication._instance) {
Authentication._instance = new Authentication();
}
return Authentication._instance;
} startApp(){
Application.getInstance().applicationContext.eventHub.emit(AuthenticationEvent.AppStart)
} logIn(token:string){
Application.getInstance().applicationContext.eventHub.emit(AuthenticationEvent.LogIn,token)
} logOut(){
Application.getInstance().applicationContext.eventHub.emit(AuthenticationEvent.LogOut)
} init(iuserAuthentciation : IUserAuthentication){
Application.getInstance().applicationContext.eventHub.on(AuthenticationEvent.AppStart,()=>{
if(iuserAuthentciation.hasToken()){
AppStorage.setOrCreate(AUTHENTICATION_STATE,new AuthenticationAuthenticated())
iuserAuthentciation.authPage();
}else{
AppStorage.setOrCreate(AUTHENTICATION_STATE,new AuthenticationUnauthenticated())
iuserAuthentciation.unAuthPage();
}
})
Application.getInstance().applicationContext.eventHub.on(AuthenticationEvent.LogIn,(token:string)=>{
iuserAuthentciation.saveToken(token)
AppStorage.set(AUTHENTICATION_STATE,new AuthenticationAuthenticated())
iuserAuthentciation.authPage();
})
Application.getInstance().applicationContext.eventHub.on(AuthenticationEvent.LogOut,()=>{
iuserAuthentciation.deleteToken()
AppStorage.set(AUTHENTICATION_STATE,new AuthenticationUnauthenticated())
iuserAuthentciation.unAuthPage();
})
}
}

六、项目中的使用

在项目中,我们通过初始化登录状态管理器,并在页面中根据认证状态改变页面样式或行为。

项目使用代码示例:

class Auth extends IUserAuthentication {
// ... 实现具体的登录和未登录页面跳转逻辑
} // 初始化
Authentication.getInstance().init(new Auth()); // 页面中使用
aboutToAppear(): void {
this.authentication();
} authentication() {
if (this.authetication instanceof AuthenticationAuthenticated) {
//获取用户数据
} else if (this.authetication instanceof AuthenticationUnauthenticated) {
//删除用户数据
}
}

七、总结

通过本文的分享,我们学习了如何在鸿蒙OS中设计和实现一个优雅的登录状态管理系统。从认证事件的设计到认证状态的管理,再到具体的认证接口实现,每一步都是为了简化开发流程,提高系统的健壮性和可维护性。希望本文能够为鸿蒙OS的开发者提供实用的参考和启发。

鸿蒙OS开发秘籍:打造优雅的登录状态管理系统的更多相关文章

  1. 从微信小程序到鸿蒙js开发【12】——storage缓存&自动登录

    鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 正文: 在应用开发时,我们常需要将一些数据缓存到本地,以提升用户体验.比如在一个电商的app中,如果希望用户登录成功后,下次打 ...

  2. 鸿蒙OS前端开发入门指南:网络图片_Image渲染网络图片

    目录: 1.开启明文传输 2.权限申请 3.引入http插件 4.案例展示 5.<鸿蒙OS前端开发入门指南>文章合集 开启明文传输 在config.json配置文件添加如下配置(如果不开启 ...

  3. 最全华为鸿蒙 HarmonyOS 开发资料汇总

    开发 本示例基于 OpenHarmony 下的 JavaScript UI 框架,进行项目目录解读,JS FA.常用和自定义组件.用户交互.JS 动画的实现,通过本示例可以基本了解和学习到 JavaS ...

  4. 华为鸿蒙OS发布!方舟支持混合编译,终将可替换安卓?

    前言 有关于鸿蒙的消息之前也有说过,就在昨天下午,华为举行了2019开发大会,正式推出了鸿蒙os系统(Harmony).其相关负责人表示,也是基于微软内核的全场景分布式OS   鸿蒙凭借微内核的优势, ...

  5. 鸿蒙OS与谷歌Fuchsia

    鸿蒙,意在“开天辟地”,它的征程是物联网.跨终端,是一款战略性产品.它真正对标的不是安卓,而是谷歌最新研发的操作系统Fuchsia. 根据Fuchsia中文社区的介绍,在安卓和 Chrome OS 两 ...

  6. 【转帖】知乎管理华为鸿蒙OS的介绍2

    作者:虎游链接:https://www.zhihu.com/question/328382980/answer/784629132来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  7. Harmony OS 开发避坑指南——源码下载和编译

    Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...

  8. Harmony OS 开发避坑指南——DevEco Device Tool 安装配置

    Harmony OS 开发指南--DevEco Device Tool 安装配置 本文介绍如何在Windows主机上安装DevEco Device Tool工具. 坑点总结: 国内部分网络环境下,安装 ...

  9. Android 快速开发系列 打造万能的ListView GridView 适配器

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...

  10. 鸿蒙OS与微内核

    目前主流面向个人端操作系统都不是像鸿蒙一样采用微内核的,或许在这些操作系统上诞生时面对的需求场景用微内核是行不通的.但在当前场景下是不是能走通要实际验证才知道.面对当前操作系统已成熟的市场生态.专利技 ...

随机推荐

  1. Android复习(四)权限—>应用权限最佳做法

    应用权限最佳做法 权限请求可以保护设备上的敏感信息,仅在需要访问信息以使应用正常工作时才应使用.利用本文档提供的技巧,您可能无需请求访问此类信息即可实现相同(或更好)的功能:但本文不会详细讨论权限在 ...

  2. Nuxt3+PM2集群模式启动及勘误

    起因 之前写过一篇 Nuxt3 的文章,Nuxt3 环境变量配置,用到了 PM2,但是里面的一些配置存在问题,最近有空又验证了一下,这里做一个勘误. 问题 PM2 的启动配置中有一项是exec_mod ...

  3. 在 KubeSphere 上快速安装和使用 KDP 云原生数据平台

    作者简介:金津,智领云高级研发经理,华中科技大学计算机系硕士.加入智领云 8 余年,长期从事云原生.容器化编排领域研发工作,主导了智领云自研的 BDOS 应用云平台.云原生大数据平台 KDP 等产品的 ...

  4. 顶点着色网格转换为 UV 映射的纹理化网格

    简介 顶点着色是一种将颜色信息直接应用于网格顶点的简便方法.这种方式常用于生成式 3D 模型的构建,例如 InstantMesh.然而,大多数应用程序更偏好使用 UV 映射的纹理化网格. 本教程将介绍 ...

  5. vue中的prop组件封装

    学习vue有一段时间了,也写了一些东西.今天看文档突然看到了一个好玩的东西,那就是prop.prop的作用是父组件中引用了子组件并给子组件加了一个属性,这个属性可以是静态的,可以是动态的,可以是数字, ...

  6. 初识GO语言--基本数据类型

  7. DFS序求LCA

    DFS序求LCA 介绍 欧拉序求LCA 的数组总是会忘记开两倍,并且预处理的常数较大.用 DFS序求LCA 可以解决这些问题. 欧拉序:进节点和出节点会重复记录节点. DFS序:深度优先搜索的顺序,不 ...

  8. 鸿蒙NEXT开发案例:转盘

    [1]引言(完整代码在最后面) 在鸿蒙NEXT系统中,开发一个有趣且实用的转盘应用不仅可以提升用户体验,还能展示鸿蒙系统的强大功能.本文将详细介绍如何使用鸿蒙NEXT系统开发一个转盘应用,涵盖从组件定 ...

  9. windows下git安装以及基本使用

    Git的基本使用 Windows下Git的基本使用与操作 安装Git 这个是一个git的windows系统的命令行版本 https://git-scm.com/downloads 安装 tortois ...

  10. win10子系统docker搭建gitlab Server

    心血来潮想搞一套cicd玩玩,结果开始就掉坑里了. 遇到问题 不会写文,所以语言组织比较差,将就看着吧!就当记录一下这个坑以后没准还能用的上. 参照https://blog.csdn.net/Mono ...