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

ops/2025/2/27 18:47:20/

在项目根路径下创建的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.ppmy.cn/ops/161749.html

相关文章

Redis底层数据结构

一. 常见数据结构的底层数据结构 1. 动态字符串SDS(Simple Dynamic String) 为什么要这样设计呢?为什么不用c语言的字符串呢? 保证二进制安全且无需遍历数组获取长度 c语言没有字符串,是靠字符数组实现的,并且以“…

nginx反向代理以及负载均衡(常见案例)

一、nginx反向代理 1、什么是代理服务器? 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据…

AI安全相关漏洞

最近AI大模型上线,除开常规的系统漏洞外,也涌现出很多新的漏洞,这篇文章对于新的一些漏洞进行一些整理,后期进行进一步的复现。 1. 对抗攻击(Adversarial Attacks) 攻击机制: 通过在输入数据中添…

PySpark实现Snowflake数据导出到Amazon Redshift

编写AWS EMR上的高性能PySpark代码,实现用SQL从Snowflake上下载数据到S3里的parquet文件,并导入Redshift表。 步骤一:配置EMR集群 首先确保您已经在AWS EMR上正确地设置了包含适当权限的角色和安全组的集群。该角色应允许访问Snowflake数据…

【设计模式】【创建型模式】单例模式(Singleton)

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…

暨南大学智科院电子信息复试Tips

暨南大学智科院人工智能(电子信息)的总成绩初试成绩X初试权重复试折合成绩X复试权重(复试权重为50%,初试权重为50%),也就是说复试占比与初试占比五五开,所以复试也是非常重要的,往年都有初试高分选手复试被刷的情况,同…

【Python爬虫(90)】以Python爬虫为眼,洞察金融科技监管风云

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

爬虫解析库:parsel的详细使用

文章目录 1. 安装 Parsel2. 基本用法3. 使用 CSS 选择器提取数据4. 使用 XPath 提取数据5. 链式调用6. 正则表达式提取7. 处理嵌套元素8. 处理默认值9. 结合 Requests 使用10. 处理复杂 HTML11. 性能优化12. 注意事项 引言:本博客详细介绍爬虫解析库parser的详细使用…