用户登录与信息管理:实现小程序登录与用户信息存储
用户登录与信息管理:实现小程序登录与用户信息存储
在现代的移动应用中,用户登录与信息管理是构建个性化用户体验的基础。小程序作为轻量级的应用形式,在简化开发流程的同时,也需要我们妥善管理用户的登录状态与用户信息。本文将详细介绍如何在小程序中实现用户登录功能,并将用户信息存储到全局状态管理对象Store中,以便在应用的不同部分高效访问这些信息。
程序登录图示
在深入探讨之前,让我们先通过一个简单的图示了解小程序登录的流程:
- 开发者服务器(后端):负责处理小程序端发送的请求,包括验证用户身份、生成并管理自定义登录态(token)。
- 前端(小程序):负责触发登录流程,获取临时登录凭证(code),并发送至后端以换取自定义登录态(token)。前端保存这个token,并在后续请求中携带。
- 后端流程:在接收到code后,后端将其发送到微信接口服务,以获取session_key和openid。后端将这些信息与自定义的token关联起来,并返回给前端。后续的请求中,后端会校验token的有效性。

用户登录:实现小程序登录功能
步骤1:创建登录API函数
在/api/user.js文件中,根据接口文档,创建一个用于登录的API函数login。
// /api/user.js
import http from '../utils/http'/*** @description 授权登录* @param {*} code 临时登录凭证code* @returns Promise*/
export const reqLogin = (code) => {return http.get(`/weixin/wxLogin/${code}`)
}
步骤2:绑定登录按钮事件
为登录按钮绑定点击事件,对应login回调函数。
步骤3:调用wx.login方法
在login回调函数中,调用wx.login方法获取临时登录凭证code。
步骤4:调用登录API
在/pages/login/login.js中导入封装好的API函数,传入code并调用。
// /pages/login/login.js
import { reqLogin } from '../../api/user'
import { toast } from '../../utils/extendApi'Page({// 点击登录login() {// 调用 wx.login 获取用户信息wx.login({success: async ({ code }) => {if (code) {// 调用接口 API,传入 code 进行登录const res = await reqLogin(code)// 登录成功以后将 token 存储到本地wx.setStorageSync('token', res.data.token)// 返回之前的页面wx.navigateBack()} else {// 登录失败后给用户进行提示toast({ title: '授权失败,请稍后再试~~~' })}}})}
})
步骤5:使用MobX进行全局状态管理
为了实现全局状态管理,我们将使用MobX。首先,安装MobX相关的包。
npm i mobx-miniprogram mobx-miniprogram-bindings
步骤6:创建Store
在项目的根目录下创建store文件夹,并在该文件夹下新建userstore.js。导入核心的observable和action方法,创建Store,同时声明数据和方法。
// /store/userstore.js
import { observable, action } from 'mobx-miniprogram'
import { getStorage } from '../utils/storage'// 创建 store 对象,存储应用的状态
export const userStore = observable({// 创建可观察状态 tokentoken: getStorage('token') || '',// 对 token 进行修改setToken: action(function (token) {this.token = token})
})
步骤7:关联页面与Store
在登录页面,导入ComponentWithStore方法,并配置storeBindings方法让页面和Store对象关联。
// /pages/login/login.js
import { reqLogin } from '../../api/user'
import { userStore } from '../../store/userstore'
import { ComponentWithStore } from 'mobx-miniprogram-bindings'ComponentWithStore({storeBindings: {store: userStore,fields: ['token'],actions: ['setToken']},methods: {// 授权登录login() {wx.login({success: async ({ code }) => {if (code) {const { data } = await reqLogin(code)// 将数据存储到本地和 store 对象中wx.setStorageSync('token', data.token)this.setToken(data.token)} else {toast({ title: '授权失败,请重新授权' })}}})}}
})
用户信息:将用户信息存储到Store
步骤1:新增userInfo字段
在store/userstore.js中新增userInfo字段,同时创建修改的action方法。
// /store/userstore.js
export const userStore = observable({// ...其他字段// 用户信息userInfo: wx.getStorageSync('userInfo') || {},// 设置用户信息setUserInfo: action(function (userInfo) {this.userInfo = userInfo})
})
步骤2:封装获取用户信息的API函数
在/api/user.js文件中,根据接口文档,创建获取用户信息的API函数reqUserInfo。
// /api/user.js
export const reqUserInfo = () => {return http.get(`/mall-api/weixin/getuserInfo`)
}
步骤3:在登录成功后获取用户信息
在登录成功以后,调用获取用户信息的接口,并将用户信息存储到本地和Store中。
// /pages/login/login.js
import { reqLogin, reqUserInfo } from '../../api/user'
import { setStorage } from '../../utils/storage'ComponentWithStore({// ...其他配置methods: {// 授权登录login() {wx.login({success: async ({ code }) => {if (code) {const { data } = await reqLogin(code)// 存储 token 并设置 tokenwx.setStorageSync('token', data.token)this.setToken(data.token)// 获取用户信息this.getUserInfo()} else {toast({ title: '授权失败,请重新授权' })}}})},// 获取用户信息async getUserInfo() {const { data } = await reqUserInfo()// 将用户信息存储到本地和 StoresetStorage('userInfo', data)this.setUserInfo(data)}}
})
总结
通过上述步骤,我们成功实现了小程序的用户登录功能,并将用户信息存储到了全局状态管理对象Store中。这不仅能够简化用户信息的访问,还能提升应用在不同页面之间传递数据的效率。利用MobX进行全局状态管理,我们能够更好地管理应用的复杂状态,为用户提供更加流畅和个性化的体验。
相关文章:
用户登录与信息管理:实现小程序登录与用户信息存储
用户登录与信息管理:实现小程序登录与用户信息存储 在现代的移动应用中,用户登录与信息管理是构建个性化用户体验的基础。小程序作为轻量级的应用形式,在简化开发流程的同时,也需要我们妥善管理用户的登录状态与用户信息。本文将…...
Java如何调用构造函数和方法以及使用
调用构造函数的格式 构造函数在创建新对象时被调用。调用格式如下: ClassName objectName new ClassName(parameters); ClassName:你需要创建其实例的类的名称。 objectName:你将创建的对象的名称。 parameters:如果你使用的是…...
TFBoys谁最重
题目 使用go语言设计一个程序计算TFBoys谁最重,要求使用结构体表示TFBoys三个成员,设计函数计算三个重量的最大值。 程序 package main import ("fmt") type Person struct {Name stringWeight float64} func (p Person) GetWeigh…...
scp 通过中间机器进行远程拷贝
有时候,我们想要通过 scp将一台机器上的文件拷贝至另外一台机器,但这两台机器可能没有直接联通,需要通过中间机器进行跳转才能访问,一个麻烦的办法就是,先将文件拷贝至中间机器,然后再从中间机器拷贝至另外…...
探索 Python 高精度计算的奥秘:mpmath 库全解析
文章目录 探索 Python 高精度计算的奥秘:mpmath 库全解析背景:为何选择 mpmath?第二部分:mpmath 是什么?第三部分:如何安装 mpmath?第四部分:mpmath 函数使用示例第五部分࿱…...
<<迷雾>> 第10章 用机器做一连串的加法(1)--使用两排开关分别给出被加数和加数 示例电路
info::操作说明 鼠标单击逻辑输入切换 0|1 状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch10-01-5-bit-adder.txt 原图...
Stable Diffusion最新版nowebui的api使用详解
最近在使用stable diffusion最新版的Stable Diffusion WebUI Forge进行api调用,下面来一步一步的进行展开吧!!! 1、下载lllyasviel/stable-diffusion-webui-forge GitHub - lllyasviel/stable-diffusion-webui-forgeContribute to lllyasviel/stable-diffusion-webui-for…...
云服务器架构详解:X86计算_ARM_GPU/FPGA/ASIC_裸金属_超级计算集群
阿里云服务器架构有什么区别?X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、超级计算集群有什么区别?阿里云服务器网aliyunfuwuqi.com分享云服务器ECS架构详细说明: 阿里云服务器ECS架构说明 阿里云服务器ECS架构 X86计算 X86计算架…...
高级java每日一道面试题-2024年10月4日-数据库篇-MySQL索引底层结构为什么使用B+树?
如果有遗漏,评论区告诉我进行补充 面试官: MySQL索引底层结构为什么使用B树? 我回答: 该面试题本质还是在考察B树的数据结构和在数据库系统中的应用,下边是详细的回答。 B树的基本特性 B 树的结构特点 非叶子节点只存储键值信息,不存储…...
【JVM】内存分析工具JConsole/Visual VM
1 缘起 日常补充JVM调优,调优实践前需要学习一些理论做支撑, JVM调优三步:理论>GC分析>JVM调优, 我们会有一些玩笑话说,做了这么久Java开发,做过JVM调优吗? 做过,面试时。当然…...
一静 、二平 、三忍 、四让、五淡
一静 、二平 、三忍 、四让、五淡。 作者:儒风君 来源:儒风大家(ID: rufengdajia) 古人为人、处事、修身,都有独特的章法。 一静、二平、三忍、四让、五淡。 说透中国人的大智慧。 1 静 《道德经》里讲:“清静为天下正。”…...
js 深入理解函数(一):函数的本质
目录 概述1. 箭头函数2. 函数名 :指向函数的指针3. 理解参数3.1 arguments 对象的作用3.2 arguments 的注意点3.3 箭头函数中的参数 4. 没有重载5. 默认参数值5.1 ES 6 支持显示定义默认参数5.2 传 undefined 等于没有传值5.3 arguments 不反映参数默认值5.4 默认值…...
MySql表结构设计
创建 create table 表名(字段1 字段类型 [约束] [comment 字段1注释],...) [comment 表注释];约束是作用于表中字段上的规则,用于限制存储在表中的数据。它的目的是保证数据库中数据的正确性、有效性和完整性。 约束描述关键字非空约束限制该字段不能为nullnot nu…...
java:pdfbox 3.0 去除扫描版PDF中文本水印
官网下载 https://pdfbox.apache.org/download.html下载 pdfbox-app-3.0.3.jar cd D:\pdfbox 运行 java -jar pdfbox-app-3.0.3.jar java -jar pdfbox-app-3.0.3.jar Usage: pdfbox [COMMAND] [OPTIONS] Commands:debug Analyzes and inspects the internal structu…...
python知识点100篇系列(17)-替换requests的python库httpx
Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,使用Requests可以轻而易举的完成浏览器可有的任何操作。 但是在python3.6之后,出现了一个requests的替代选项; httpx httpx是Python新一代的网络请求库…...
python 实现graph list图列算法
graph list图列算法介绍 图列(Graph List)算法通常指的是在图的表示中,使用列表(List)或更具体地说,邻接表(Adjacency List)来表示图的一种算法。邻接表是图的一种常见表示方法&…...
LFU算法 初始频率 动态频率
LFU(Least Frequently Used)算法是一种缓存淘汰策略,其核心思想是根据数据的访问频率来决定淘汰哪些数据。具体来说, LFU算法认为如果一个数据在过去一段时间内被访问的次数很少,那么它在未来被再次访问的概率也…...
Spring Boot 进阶-详解SpringBoot的复杂数据校验规则
在之前的文章中,我们介绍了SpringBoot整合JSR-303规则来完成数据校验操作。接下来我们来聊一聊关于数据校验的具体用法。 之前的文章中举过一个简单的例子通过学生信息提交的例子来介绍了关于数据校验如何去做。那么接下来这篇文章,我们就来看看对于一些复杂的数据校验如何完…...
wsl环境下安装Ubuntu,并下载MySQL5.7
安装操作需root权限,切换root用户有两种方式: 1-通过 sudo su - ,切换到root用户(登录后长期有效)。 2-在每一个命令前加上sudo,临时提升权限(仅对一条命令有效)。 1、下载apt仓库…...
倪师学习笔记-天纪-01
一、概要 介绍课程内容,介绍部分概念 二、具体内容 1、天纪内容 天机道:看象,使用斗数等工具人间道:看卦,使用易经地脉道:看风水地理 2、神 神与形对应,形是神的实例,神是形的…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
