小程序的登录验证流程图:

第一步:获取微信用户的基本信息:

调用getUserProfile方法,获取用户基本信息

methods:{getUserProfile(){desc:"完善用户信息",success:(res)=>{this.saveUserInfo(res.userInfo) //将信息保存在状态机}     }
}
第二步:获取Code码

调用login()方法,获取code

const result2 = await uni.login()let query = {userInfo:userInfo,code:result2.code,appId:'xxxxxxx',appSecret:'xxxxxx'}

参数说明:

  • code:必传参数,后端需要通过 code 去获取用户的 openid;

  • userInfo:非必选参数,需要根据实际项目需求,看后端是否需要用户信息;

  • appId 和 appSecret:学习阶段需要传递,实际项目中不需要传递,这两个值会在后端直接设置好;

  • appId 和 appSecret 在“微信公众平台”中获取

第四步:在获取Code码后,调用request方法,获取token
const {data:{token}} = await uni.request({url:'http://www.sss.cn:3000/user/wxLogin',method:'POST',data:query,})this.saveToken(token)
第五步:将获取的Token保存在Vuex中
this.saveToken(token)

登录验证:

首先在user模块的状态机文件中编写actions的方法getUserInfoAsync来判断用户的token是否有效,如果无效直接跳到登录页面

actions:{getUserInfoAsync(context,payload){let token = {token:context.state.token};uni.request({url:"http://www.sssssss.cn:3000/user/getUserInfo",header:{"Authorization":context.state.token},data:{token:context.state.token},success:(res)=>{console.log('res',res);if(res.statusCode == 401){uni.showToast({title:"token已经过期重新登录",success() {context.commit('saveUserInfo',{})context.commit('removeToken','')uni.switchTab({url:'/pages/mine/mine'})}})}}})}}

验证的时候也是调用uni.request()方法

Vuex中的2配置

export default {namespaced:true,state:{userMessage:JSON.parse(uni.getStorageSync('userInfo') || '{}'),token:uni.getStorageSync('token')||'',},mutations:{saveUserInfo(state,payload){state.userMessage = payloaduni.setStorageSync('userInfo',JSON.stringify(payload))},saveToken(state,payload){state.token = payloaduni.setStorageSync('token',payload)},removeToken(state){state.userMessage = {}state.token = ''uni.removeStorageSync('userInfo')uni.removeStorageSync('token')}},

注意

这里需要注意的是,在将用户信息保存在Vuex之前,先将用户的值赋给state的userInfo,否则,在组件调用Vuex时,会产生用户信息无法立即更新,这是因为在组件中调用的state时,是在computed计算属性中调用state,而computed是在页面创建的时候才会被触发,又因为,当点击登录按钮的时候,我们才将用户信息保存在Vuex中,在这之前Vuex都是空白的数据。所以当我们获取用户信息的时候我们在组件中将信息保存在Vuex中并且将信息赋给Vuex。

退出登录:
import {createNamespacedHelpers} from 'vuex'
const {mapMutations}=createNamespacedHelpers('user')
export default {name:"userinfo",methods:{...mapMutations(['updateToken','updateUserInfo']),async logout(){const [err, succ] = await uni.showModal({title: '提示',content: '确认退出登录吗?'}).catch(err => err)if (succ && succ.confirm) {this.updateToken('')this.updateUserInfo({})}}}
]}

在components/userinfo/userinfo组件中完成用户的退出登录功能

Uniapp小程序登录和登录验证相关推荐

  1. 【uni-app】uni-app 小程序获取手机号登录

    具体业务 小程序使用手机号登录,需要绑定到当前业务系统.获取手机号时序图如下: 实现 前端 uni-app 我对 uni.request 进行了封装,可能请求方式有些不同 <template&g ...

  2. uni-app小程序无感登录逻辑实现

    封装请求,此处只是demo // request.js function post(url,data) {return new Promise((resolve, reject) => {uni ...

  3. uniapp 小程序 微信一键登录

    效果图 代码 //小程序登录getUserProfile() {var that = thisuni.getUserProfile({desc: '用于登录',success(res) {that.u ...

  4. uniapp小程序使用getUserProfile登录(获取昵称统一为‘微信用户’+头像为灰色头像)

    一.微信授权登录按钮 <view class="name" v-if="!hasLogin"><u-button @click="g ...

  5. 【uniapp小程序授权登录】

    uniapp微信小程序授权登录具体流程 打开小程序公众平台,申请小程序appid hbuilderx创建项目并打开项目,点击manifest.json->点击小程序配置->配置小程序app ...

  6. uniapp小程序 扫二维码登录uniapp h5

    uniapp扫码登录功能 一.测试环境:uniapp小程序 uniapp h5 二.实现思路 三.实现步骤 一.测试环境:uniapp小程序 uniapp h5 二.实现思路 1.手机登录uniapp ...

  7. java注册登录小程序,详解小程序之简单登录注册表单验证

    这段时间在做员工管理的小程序,前期在登录注册上花了不少功夫,今天就给大家分享下. 效果图,wxss的内容较简单,自己编写即可. ##主要内容 一.首先我是在util.js中引入表单正则验证规则,给予l ...

  8. 微信小程token_微信小程序开发之登录换取token

    本文将带你了解微信小程序开发之登录换取token,希望本文对大家学微信有所帮助 前言:这次主要是介绍些业务逻辑,技术点倒是没有多少.不过在开发中,优秀的编程思路同样是非常值得学习的. 最近小程序可以说 ...

  9. 关于小程序区服登录账号换模拟器登录的操作

    关于小程序区服登录账号换模拟器登录的操作 游戏内已经绑定手机号了,有一个任务是绑定手机的. 打开模拟器里我是大东家,选择忘记密码,填绑定手机号验证短信,然后输入新密码. 然后就可以用手机号+密码在模拟 ...

  10. 微信小程序的详细登录(上)

    前段时间发布了一个微信小程序的简单登录,那段时间我一直在忙着项目,有一天,我清闲下来准备进入小程序群里面看一下来着,刚好有人问问题了,我一看这哥们的问题好像是我写的东西啊,我感觉是时候秀一波了,是时候 ...

最新文章

  1. 2021-2027全球与中国经颅磁刺激仪(TMS)市场现状及未来发展趋势
  2. MaxCompute 图计算开发指南
  3. php图片是啥,php图片处理类(附实例)
  4. 10-礼帽与黑帽操作
  5. ios html清除缓存,iOS开发之1行代码实现缓存计算及清除缓存
  6. 华为荣耀鸿蒙系统升级名单,华为鸿蒙系统正式版首批升级名单公布:这8款机型用户有福了...
  7. 计算机应用段落设置,计算机应用操作基础.docx
  8. 校招刷题---java选择题笔记01
  9. Gym102174 (The 14-th BIT Campus Programming Contest)
  10. 力扣-1046 最后一块石头的重量
  11. Navicat安装教程(超详细)
  12. Spring的IOC和AOP原理及其使用
  13. 雷云驱动2从云服务器,Razer Synapse 2.0(雷蛇云驱动)
  14. 计算机毕业设计java+jsp报刊订阅信息网站(源码+系统+mysql数据库+Lw文档)
  15. 二十个不可不知的 TSM 知识点
  16. JAVA第八课:集合(CollectionMap)
  17. 5、DML语句(数据操纵语言-增删改查)
  18. layui 动态绑定下拉框
  19. 功利主义穆勒思维导图_穆勒功利主义读书笔记
  20. flutter 中的深拷贝

热门文章

  1. CodeTop013 妈的怎么命名就不规范了(股票)
  2. 韦东山 Linux开发板,从零开始构建bootloader(基于韦东山JZ2440V3开发板)
  3. Linux split命令
  4. Open Cluster Management 多集群管理
  5. 人生不能同时追赶两只兔子
  6. 热烈欢迎成都武侯高新技术产业发展股份有限公司许焰总经理莅临
  7. 迷你旅游网——项目初始化(从GitHub上pull项目并导入IDEA......)
  8. Oracle CloudWorld 2022 - Oracle智能分析与机器学习新动向
  9. 记录一个面试题 统计出现次数最多的文件后缀名,如果有多个后缀名出现次数一样多,就都返回def count_extnames(files: list) - list: return # 补全这里的代码
  10. 【效率】一款Excel免费可视化工具,赞!