当前位置: 首页 > news >正文

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

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.lryc.cn/news/503696.html

相关文章:

  • 每天40分玩转Django:Django视图和URL
  • Kioptirx level4
  • JPG 转 PDF:免费好用的在线图片转 PDF 工具
  • 《Django 5 By Example》阅读笔记:p543-p550
  • 精品基于Python实现的微信小程序校园导航系统-微信小程序
  • 【数字花园】个人知识库网站搭建:①netlify免费搭建数字花园
  • 数据仓库工具箱—读书笔记01(数据仓库、商业智能及维度建模初步)
  • 分布式 窗口算法 总结
  • docker容器内部启动jupyter notebook但是宿主机无法访问的解决方法
  • 2.2 数据库设计方法
  • ALOHA 协议详解
  • Quant connect的优势和不足,学习曲线难
  • 分布式 漏桶算法 总结
  • 2450.学习周刊-2024年50周
  • 前端性能优化实战:从加载到渲染的全链路提升
  • pdf merge
  • Python高性能web框架-FastApi教程:(3)路径操作装饰器方法的参数
  • 怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev
  • bean创建源码
  • axfbinhexelf文件区别
  • ABAP时间戳与日期时间转换及时区处理
  • #渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍01
  • Flink是什么?Flink技术介绍
  • DETR-ResNet-50:Facebook的革命性目标检测模型
  • 0002.基于springboot +layui二手物品交易平台
  • 【游戏设计原理】7 - 加德纳的多元智能理论
  • React Image Crop——在React应用中轻松实现图片裁剪功能
  • 深度对比:Ubuntu 与 CentOS 系统的异同点解析
  • 操作系统内存管理
  • 数据链路层(Java)(MAC与IP的区别)