鸿蒙OS开发秘籍:打造优雅的登录状态管理系统
一、前言
在鸿蒙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开发秘籍:打造优雅的登录状态管理系统的更多相关文章
- 从微信小程序到鸿蒙js开发【12】——storage缓存&自动登录
鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 正文: 在应用开发时,我们常需要将一些数据缓存到本地,以提升用户体验.比如在一个电商的app中,如果希望用户登录成功后,下次打 ...
- 鸿蒙OS前端开发入门指南:网络图片_Image渲染网络图片
目录: 1.开启明文传输 2.权限申请 3.引入http插件 4.案例展示 5.<鸿蒙OS前端开发入门指南>文章合集 开启明文传输 在config.json配置文件添加如下配置(如果不开启 ...
- 最全华为鸿蒙 HarmonyOS 开发资料汇总
开发 本示例基于 OpenHarmony 下的 JavaScript UI 框架,进行项目目录解读,JS FA.常用和自定义组件.用户交互.JS 动画的实现,通过本示例可以基本了解和学习到 JavaS ...
- 华为鸿蒙OS发布!方舟支持混合编译,终将可替换安卓?
前言 有关于鸿蒙的消息之前也有说过,就在昨天下午,华为举行了2019开发大会,正式推出了鸿蒙os系统(Harmony).其相关负责人表示,也是基于微软内核的全场景分布式OS 鸿蒙凭借微内核的优势, ...
- 鸿蒙OS与谷歌Fuchsia
鸿蒙,意在“开天辟地”,它的征程是物联网.跨终端,是一款战略性产品.它真正对标的不是安卓,而是谷歌最新研发的操作系统Fuchsia. 根据Fuchsia中文社区的介绍,在安卓和 Chrome OS 两 ...
- 【转帖】知乎管理华为鸿蒙OS的介绍2
作者:虎游链接:https://www.zhihu.com/question/328382980/answer/784629132来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- Harmony OS 开发避坑指南——源码下载和编译
Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...
- Harmony OS 开发避坑指南——DevEco Device Tool 安装配置
Harmony OS 开发指南--DevEco Device Tool 安装配置 本文介绍如何在Windows主机上安装DevEco Device Tool工具. 坑点总结: 国内部分网络环境下,安装 ...
- Android 快速开发系列 打造万能的ListView GridView 适配器
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...
- 鸿蒙OS与微内核
目前主流面向个人端操作系统都不是像鸿蒙一样采用微内核的,或许在这些操作系统上诞生时面对的需求场景用微内核是行不通的.但在当前场景下是不是能走通要实际验证才知道.面对当前操作系统已成熟的市场生态.专利技 ...
随机推荐
- 浅析Jvm
浅析Jvm 基本概念 引言 Java 虚拟机(JVM,Java Virtual Machine)是 Java 生态系统的核心组成部分,它为 Java 应用程序提供了一个运行环境.JVM 的主要职责是将 ...
- 文件操作(C语言)
1. 为什么使用文件? 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用 ...
- SDUT 2021 Autumn Team Contest 36th G - Alice’s Stamps(补)
队友做出的这个题,赛后补的=.= G - Alice's Stamps (一般DP) 题目大意 :给你m个区间,选k个,求k个区间并集 1≤T≤100 1≤K≤M 1≤N,M≤2000 1≤Li≤ R ...
- spring生态体系
spring boot使用默认开发配置来实现快速开发spring xd用来简化大数据应用开发spring cloud为分布式系统开发提供工具集spring data对主流的关系型和nosql数据库的支 ...
- 重温c语言之,7天开整,就是随便的写写,第三天+第四天版
一:指针 1.关于指针的含义---粗略 例如:int a=10; int* p=&a; 这里的*,是说明p是指针变量,int 说明p是指向的对象是int类型的 *p=20, 这里的*是解引用符 ...
- 机器学习框架推理流程简述(以一项部署在windows上的MNN框架大模型部署过程为例子)
一.写在前面 公司正好有这个需求,故我这边简单接受进行模型的部署和demo程序的编写,顺便学习了解整个大模型的部署全流程.这篇博客会简单提到大模型部署的全流程,侧重点在推理这里.并且这篇博客也是结合之 ...
- 远程连接Docker服务
背景 本地开发了一个SpringBoot项目,想通过Docker部署起来,我本地是Window10系统,由于某些原因不能虚拟化并且未安装Docker-Desktop,所以我在想有没有办法本地不需要虚拟 ...
- SyntaxError: non-default argument follows default argument
有时候没注意就会犯一些低级错误 问题原因 把没有默认值的形参放到了带有默认值的形参后面 解决办法 问了一下chatgpt,果然一语道破.因为python在定义函数时,在不定长参数中,默认值参数不能放在 ...
- WebLogic T3反序列化漏洞
目录 前言 T3协议概述 T3反序列漏洞分析 漏洞复现 修复措施 前言 WebLogic的反序列化漏洞是一个经典的漏洞系列,原因就在于WebLogic在通信过程中使用T3协议传输数据,涉及到了序列化和 ...
- 谷歌chrome浏览器大量书签消失,怎么恢复历史?
作者:jdjdjdh链接:https://www.zhihu.com/question/400424237/answer/1604383205来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...