用户登录与信息管理:实现小程序登录与用户信息存储

用户登录与信息管理:实现小程序登录与用户信息存储

在现代的移动应用中,用户登录与信息管理是构建个性化用户体验的基础。小程序作为轻量级的应用形式,在简化开发流程的同时,也需要我们妥善管理用户的登录状态与用户信息。本文将详细介绍如何在小程序中实现用户登录功能,并将用户信息存储到全局状态管理对象Store中,以便在应用的不同部分高效访问这些信息。

程序登录图示

在深入探讨之前,让我们先通过一个简单的图示了解小程序登录的流程:

  1. 开发者服务器(后端):负责处理小程序端发送的请求,包括验证用户身份、生成并管理自定义登录态(token)。
  2. 前端(小程序):负责触发登录流程,获取临时登录凭证(code),并发送至后端以换取自定义登录态(token)。前端保存这个token,并在后续请求中携带。
  3. 后端流程:在接收到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。导入核心的observableaction方法,创建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进行全局状态管理,我们能够更好地管理应用的复杂状态,为用户提供更加流畅和个性化的体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1553539.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

跨平台音乐播放器Feishin

什么是 Feishin ? Feishin 是一款现代的自托管音乐播放器,支持多种音乐来源和功能。它是由Sonixd 的重构版本发展而来,能够与 Navidrome 或 Jellyfin API 音乐服务器兼容,目前还不支持 Subsonic API 。Feishin 具有现代化的用户界…

大论文记录

基础知识回顾 1.强化学习(Agent、Environment) 在 RL 中,代理通过不断与环境交互、以试错的方式进行学习,在不确定性下做出顺序决策,并在探索(新领域)和开发(使用从经验中学到的知识&#xff…

Linux 信号详解

目录 一.前置知识 1.前台进程和后台进程 a.概念理解 b.相关指令 2.信号的前置知识 a.Linux 系统下信号的概念 b.进程对信号的处理方式 3.信号的底层机制 二.详解信号 1.信号的产生 a.键盘组合键 b.kill 指令和系统调用接口 ① kill 指令 ② kill() 系统调用接口 ③ raise() 系统…

【AIGC】AI时代的数据安全:使用ChatGPT时的自查要点

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯法律法规背景中华人民共和国保守秘密法中华人民共和国网络安全法中华人民共和国个人信息保护法遵守法律法规的重要性 💯ChatGPT的数据使用特点ChatGPT数据安全…

学校在线学习作业批改教学管理平台的设计与实现SpringBoot+VUE

目录 一、项目背景及目标 二、技术选型 三、系统功能模块设计 四、关键技术实现 五、总结 在当今社会上,随着社会的发展和进步,对于现代的学生来说网络课程已经广泛应用于学校的每个角落,而一个课程教学管理平台对于现如今的课堂是不可缺…

资源《Arduino 扩展板4-单游戏摇杆》说明。

资源链接: Arduino 扩展板4-单游戏摇杆 1.文件明细: 2.文件内容说明 包含:AD工程、原理图、PCB。 3.内容展示 4.简述 该文件为PCB工程,采用AD做的。 该文件打板后配合Arduino使用,属于Arduino的扩展板。 该文件…

华为资源分享

紫光云文档中心提供弹性计算服务文档https://www.unicloud.com/document/product/ElasticComputeService/index.html报文格式华为报文格式资料Info-Finder(在线工具) 报文格式华为IP网络电子书华为IP网络相关电子书IP网络系列丛书 - 华为企业业务华为产品…

(C语言贪吃蛇)11.贪吃蛇方向移动和刷新界面一起实现面临的问题

目录 前言 实现效果 支持方向变换 修改默认效果 如何修改 总结 前言 我们上节实现了不需要按下右键就可以是贪吃蛇自发的向右移动,本节我们主要来解决贪吃蛇方向移动和刷新界面所遇到的问题。 实现效果 上图是我们希望实现的效果,我们可以自发地控…

【递归】13. leetcode 1457. 二叉树中的伪回文路径

1 题目描述 题目链接:二叉树中的伪回文路径 2 解答思路 第一步:挖掘出相同的子问题 (关系到具体函数头的设计) 第二步:只关心具体子问题做了什么 (关系到具体函数体怎么写,是一个宏观的过…

已解决:Could not find artifact xxx

已解决:Could not find artifact xxx 文章目录 写在前面问题描述报错原因分析 解决思路解决办法1. 检查依赖声明的正确性2. 检查远程仓库配置3. 检查网络连接4. 清理本地缓存并强制更新5. 手动上传依赖到私有仓库6. 检查本地仓库是否已被损坏 总结 写在前面 在使用…

生信初学者教程(二十三):REF+SVM筛选候选标记物

文章目录 介绍加载R包导入数据准备数据机器学习特征筛选数据分割基础模型Recursive Feature Elimination特征筛选调参最终分类模型测试集验证标记基因输出结果总结介绍 采用了REF(Recursive Feature Elimination) 结合 SVM(Support Vector Machine) 的方法,对差异基因(参…

遥感影像-语义分割数据集:Landsat8云数据集详细介绍及训练样本处理流程

原始数据集详情 简介:该云数据集包括RGB三通道的高分辨率图像,在全球不同区域的分辨率15米。这些图像采集自Lansat8的五种主要土地覆盖类型,即水、植被、湿地、城市、冰雪和贫瘠土地。 KeyValue卫星类型landsat8覆盖区域未知场景水、植被、…

Llama3.2开源:Meta发布1B和3B端侧模型、11B和90B多模态模型

最近这一两周不少互联网公司都已经开始秋招提前批面试了。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友…

司法质量改善:巡回法庭的准自然实验(2000-2022年)(原始数据、计算代码、最终计算结果(Excel和Dta)和参考文献)

巡回法庭的设立背景 最高人民法院自2015年起分批次设立地方巡回法庭,以期改善司法质量,促进司法公正。这种改革措施为研究提供了一个独特的机会,可以通过准自然实验的方法来评估其效果。 2000-2022年司法质量改善:巡回法庭的准自…

ML 系列: (10)— ML 中的不同类型的学习

一、说明 我们之前将机器学习方法分为三类:监督学习、无监督学习和强化学习。机器学习方法可以分为不同的类型,我们将在下面讨论最重要的类型。 二、懒惰学习与急切学习 预先学习的工作原理是使用训练数据构建模型,然后使用此模型评估测试数据…

强大的JVM监控工具

介绍 在生产环境中,经常会遇到各种各样奇葩的性能问题,所以掌握最基本的JVM命令行监控工具还是很有必要的 名称主要作用jps查看正在运行的Java进程jstack打印线程快照jmap导出堆内存映像文件jstat查看jvm统计信息jinfo实时查看和修改jvm配置参数jhat用…

水域救援方案

水域救援是一项在复杂水域环境中进行的紧急救援行动,旨在保障人民生命财产安全、维护社会稳定,并促进相关产业的发展。以下是对水域救援的全面介绍: 一、定义与重要性 水域救援是指在人员在水域中生命受到严重威胁或重要场所、建筑物受到水…

前缀和(8)_矩阵区域和

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 前缀和(8)_矩阵区域和 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 温馨提示:…

MybatisPlus代码生成器的使用

在使用MybatisPlus以后,基础的Mapper、Service、PO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成PO、Mapper、Service等相关代码。只不过代码生成器同样要编码使用,也很麻烦。 这里推荐大家使…

华为Nova9开启开发人员选项

默认状态下,华为Nova9的开发人员选项是隐藏的,如下图: 要开启开发人员选项,在“设置→关于手机”中找到“HarmonyOS版本”或者“软件版本”,在版本号上连续点击,每次点击“HarmonyOS版本”和“软件版本”会…