华为HarmonyOS NEXT 原生应用开发: 数据持久化存储(用户首选项)的使用 token令牌存储鉴权!

news/2024/12/12 18:54:32/

Preferences 数据持久化存储

用户首选项(Preferences)

1. 封装 仓库工具类

● 这里可以选择将 数据字段 key 抽取为一个静态方法,这里选择让用户传参,看起来较容易理解!

/*** 首选项 preferences - 实现数据持久化存储*/
import { preferences } from '@kit.ArkData'
export class PreferencesClass {// 上下文(在【EntryAbility中获取使用 this.context】, 【除此之外,使用 getContext() 获取】)static context: Context// 获取创库static getStoreInstance() {return preferences.getPreferencesSync(PreferencesClass.context || getContext(), {name: "Token_Key"})}/*** 设置仓库数据* @param key:数据在仓库的字段名* @param token:需要存储或者修改的 数据 value 值*/static async setData(key: string, token: string) {const store = PreferencesClass.getStoreInstance()store.putSync(key, token)  // 设置字段(key) 和  valueawait store.flush()}/*** 获取仓库数据* @param:key 数据所对应的字段 key* @returns:  (筛选仓库:存在将数据给用户,不存在则默认为空字符串)*/static getData(key: string) {return PreferencesClass.getStoreInstance().getSync(key, "")}/*** 删除数据* @param key: 参数为需要删除的数据字段名*/static async removeData(key: string) {const storeInstance = PreferencesClass.getStoreInstance()storeInstance.deleteSync(key)await storeInstance.flush()}
}
2. token的存储鉴权
  • 这里判断用户是否存在token 权限,实现用户进应用是去login还是home页面。
let page: string = ""// 获取上下文PreferencesClass.context = this.context// 在窗口模型创建完毕,加载数据内容(页面)之前获取token,校验去向if ( PreferencesClass.getData("token") === "" ) {// 没登录状态,去登录页面page = "pages/Login"} else {// 仓库有token 数据,就直接去首页page = "pages/Home"}windowStage.loadContent(page, (err) => {});
}
3. 对仓库中的 数据 进行操作
  • 我们只需要调用工具类中的方法即可实现操作, 需要注意的是每次使用要保证传入当前的上下文哦!操作方法直接调用静态属性赋值即可。(这里我在Ability配置了,所以全局共享了)
// 设置为空,相当于删除token了!
PreferencesClass.setData("token", "") 
// 调用方法,传入字段名,实现删除!
PreferencesClass.removeData("token")

http://www.ppmy.cn/news/1554570.html

相关文章

Leetcode:1812

1,题目 2,思路 先判断字母第一行颜色:白为ture,黑为false在判断根据字母规则判断数字所在的位置颜色ascii码表中:a为奇数,1为奇数,b为偶数,2为偶数,所以可以利用奇偶性对…

孚盟云 MailAjax.ashx SQL漏洞复现

0x01 产品描述: ‌孚盟云‌是由

自动化运维-配置Mysql、emqx、redis、nginx等通用性Linux日志分割工具 - logrotate

前言:logrotate 是一个在 Linux 系统中用于管理和轮转日志文件的工具。它的主要目的是帮助系统管理员自动执行日志文件的轮转、压缩、删除和邮件通知等任务,以防止日志文件占用过多的磁盘空间,同时保持日志文件的可管理性。 参考命令&#x…

Docker 常用操作大全:从基础到进阶的全面指南

Docker 是当今 DevOps 和开发环境中最常用的容器化平台之一。它的易用性和功能强大,使得容器技术变得广泛流行,并成为软件开发流程的重要组成部分。为了帮助你掌握 Docker 的操作,本文将详细介绍 Docker 的各种常用操作,帮助你从基…

python使用dump_cmd备份mysql报错

这个错误信息表明 Python 在尝试执行一个外部命令时,无法找到指定的文件。错误 [WinError 2] 系统找不到指定的文件。 指的是 Windows 系统无法找到你尝试运行的程序或命令。 从错误信息来看,问题发生在 subprocess.run(dump_cmd) 这一行。这里的 dump_…

Docker 安装 Jenkins:2.346.3

准备:已安装Docker,已配置服务器安全组规则 1581 1、拉取镜像 [rootTseng ~]# docker pull jenkins/jenkins:2.346.3 2.346.3: Pulling from jenkins/jenkins 001c52e26ad5: Pull complete 6b8dd635df38: Pull complete 2ba4c74fd680: Pull complet…

ubuntu 安装docker遇到的问题,如何解决的

1.服务器先确保可以访问外网 ping或者telnet 2.看下liunx操作系统是什么版本,从阿里云镜像里面找到对应的版本 粘贴到sources里面,没权限,要给权限 获取镜像的地址:ubuntu镜像_ubuntu下载地址_ubuntu安装教程-阿里巴巴开源镜像…

Python使用Selenium库获取 网页节点元素、名称、内容的方法

我们要用到一些网页源码信息,例如获取一些节点的class内容, 除了使用Beautifulsoup来解析,还可以直接用Selenium库打印节点(元素)名称,用来获取元素的文本内容或者标签名。 例如获取下面的class的内容&am…