【Uniapp-Vue3】开发userStore用户所需的相关操作

news/2025/2/27 7:24:19

在项目根路径下创建的stores文件夹中创建user.js文件 

并将以下内容复制到user.js中

import {ref} from "vue"
import { defineStore } from 'pinia';
const uniIdCo = uniCloud.importObject("uni-id-co")
const db = uniCloud.database();
const usersTable = db.collection('uni-id-users')

export const useUserStore = defineStore("user",()=>{
	let hostUserInfo = uni.getStorageSync('uni-id-pages-userInfo')||{}
	const userInfo = ref(hostUserInfo);
	const hasLogin= ref(Object.keys(hostUserInfo).length != 0);
	
	
	// data不为空,表示传递要更新的值(注意不是覆盖是合并),什么也不传时,直接查库获取更新
	async function updateUserInfo(data = false) {
		if (data) {
			usersTable.where('_id==$env.uid').update(data).then(e => {
				// console.log(e);
				if (e.result.updated) {
					uni.showToast({
						title: "更新成功",
						icon: 'none',
						duration: 3000
					});
					setUserInfo(data)
				} else {
					uni.showToast({
						title: "没有改变",
						icon: 'none',
						duration: 3000
					});
				}
			})
	
		} else {
			const uniIdCo = uniCloud.importObject("uni-id-co", {
				customUI: true
			})
			try {
				let res = await usersTable.where("'_id' == $cloudEnv_uid")
					.field('mobile,nickname,username,email,avatar_file')
					.get()
	
				const realNameRes = await uniIdCo.getRealNameInfo()
	
				// console.log('fromDbData',res.result.data);
				setUserInfo({
					...res.result.data[0],
					realNameAuth: realNameRes
				})
			} catch (e) {
				setUserInfo({},{cover:true})
				console.error(e.message, e.errCode);
			}
		}
	}
	
	
	async function setUserInfo(data, {cover}={cover:false}) {
		// console.log('set-userInfo', data);
		let _userInfo = cover?data:Object.assign(userInfo.value,data)
		userInfo.value = Object.assign({},_userInfo)
		hasLogin.value = Object.keys(userInfo.value).length != 0
		// console.log('store.userInfo', store.userInfo);
		uni.setStorageSync('uni-id-pages-userInfo', userInfo.value)
		return data
	}
	
	
	async function logout() {
		// 1. 已经过期就不需要调用服务端的注销接口	2.即使调用注销接口失败,不能阻塞客户端
		if(uniCloud.getCurrentUserInfo().tokenExpired > Date.now()){
			try{
				await uniIdCo.logout()
			}catch(e){
				console.error(e);
			}
		}
		uni.removeStorageSync('uni_id_token');
		uni.setStorageSync('uni_id_token_expired', 0)		
		uni.$emit('uni-id-pages-logout')
		setUserInfo({},{cover:true})
	}
	
	//登录后的操作
	function loginSuccess(e = {}){
		const {
			showToast = true, toastText = '登录成功', autoBack = true, uniIdRedirectUrl = '', passwordConfirmed
		} = e
		// console.log({toastText,autoBack});
		if (showToast) {
			uni.showToast({
				title: toastText,
				icon: 'none',
				duration: 3000
			});
		}
		updateUserInfo()	
		uni.$emit('uni-id-pages-login-success')	
	}
			
	return {userInfo,hasLogin,loginSuccess,updateUserInfo}
})

在updateUserInfo函数中修改需要的字段

具体字段可以在database文件下的uni-id-users.schema数据表中查看

我们在获取的时候可以通过如下方式对字段取别名:

字段 as 别名


http://www.niftyadmin.cn/n/5869715.html

相关文章

【奥卡姆剃刀原理-如何理解云计算和边缘计算 关键字摘取】

云计算可能还是你相对熟悉的概念。通俗来说,就是把计算任务从本地挪到远程,往往是挪到一个大的计算中心。在那里完成计算之后,再把计算结果返回本地。这样本地就不用部署很强的硬件搞计算了。 而边缘计算的介绍大都说,这是把一部…

Android-创建mipmap-anydpi-v26的Logo

利用 Android Studio 自动创建 创建新项目:打开 Android Studio,点击 “Start a new Android Studio project” 创建新项目。在创建项目的过程中,当设置Target SDK Version为 26 或更高版本时,Android Studio 会在项目的res目录下…

Fiddler在Windows下抓包Https

文章目录 1.Fiddler Classic 配置2.配置浏览器代理自动代理手动配置浏览器代理 3.抓取移动端 HTTPS 流量(可选)解决抓取 HTTPS 失败问题1.Fiddler证书过期了 默认情况下,Fiddler 无法直接解密 HTTPS 流量。需要开启 HTTPS 解密: 1…

Jenkins 自动打包项目镜像部署到服务器 ---(前端项目)

Jenkins 新增前端项目Job 指定运行的节点 选择部署运行的节点标签,dev标签对应开发环境 节点的远程命令执行配置 jenkins完整流程 配置源码 拉取 Credentials添加 触发远程构建 配置后可以支持远程触发jenkins构建(比如自建的CICD自动化发布平台&…

爬虫获取 t_nlp_word 文本语言词法分析接口:技术实现与应用实践

在自然语言处理(NLP)领域,文本语言词法分析是理解文本内容的基础。通过分词、词性标注和命名实体识别等功能,开发者可以深入挖掘文本数据的价值。本文将详细介绍如何通过爬虫技术结合 t_nlp_word 文本语言词法分析接口&#xff0c…

ubuntu上boost卸载和安装

boost官方:Version 1.68.0 下载boost_1_68_0.tar.gz或可能其它版本 tar xzvf boost_1_68_0.tar.gz cd boost_1_68_0/ sudo apt-get update sudo apt-get install build-essential autotools-dev libicu-dev ibbz2-dev #卸载旧版本 # uninstall dpkg sudo apt --pu…

《昇腾推理服务器+DeepSeek大模型》技术培训在图为科技成功举办

2月17日,华为政企业务团队受邀莅临图为科技深圳总部,并成功举办了一场聚焦于《昇腾推理服务器DeepSeek大模型》的专业知识培训。 此次培训活动不仅深化了双方的技术交流,更标志着昇腾AI与DeepSeek大模型的全面融合应用即将迈入实质性落地的新…

小程序类目调整汇总公告

各位小程序开发者: 为进一步加强平台的规范管理,优化开发者类目选择体验,现对以下类目进行调整,请各位开发者知悉。 类目新增 非个人主体 #【交通服务-国际客运】 现资质要求 (2选1): 1…