由于自己很菜,编辑一下记录写代码过程。 原文链接在文末(侵删),可以去原文下载demo

在应用中保持登录状态是一个应用常见的需求,本文简单介绍下在 uni-app 中如何保存用户登录状态。

简介

uni-app 中不支持读写 cookie,所以不能如传统的应用那样通过读取 cookie 来判断是否是登录状态。

在 uni-app 进行登录操作时,可以将需要校验的数据放在 uni.request 的 data 中,也可以在 header 里设置 token,使用 token 进行登录状态校验。

流程:首页为未登录状态 => 进行登录 => 首页状态改变 => 退出应用再次进入仍然是已登录状态。

vuex

使用 vuex 进行管理登陆状态和保存用户信息,下面是部分代码。

const store = new Vuex.Store({  state: {  uerInfo: {},  hasLogin: false  },  mutations: {  login(state, provider) {//改变登录状态  state.hasLogin = true  state.uerInfo.token = provider.token  state.uerInfo.userName = provider.user_name  uni.setStorage({//将用户信息保存在本地  key: 'uerInfo',  data: provider  })  },  logout(state) {//退出登录  state.hasLogin = false  state.uerInfo = {}  uni.removeStorage({  key: 'uerInfo'  })  }  }
})

登录

在 login.vue(登录页面)输入用户名密码后,调用 uni.request 进行登录,登录成功后调用 vuex 的方法改变应用的登陆状态。

<script>  import {  mapMutations  } from 'vuex';  export default {  methods: {  bindLogin(e) {  let name = e.detail.value.nameValue,  password = e.detail.value.passwordValue;  uni.request({  url: `${this.$serverUrl}/login.php`,  header: {  "Content-Type": "application/x-www-form-urlencoded"  },  data: {  "username": name,  "password": password  },  method: "POST",  success: (e) => {  if (e.data.code === 0) {//登录成功后改变vuex的状态,并退出登录页面  this.login(e.data)  uni.navigateBack()  }  }  })  },  ...mapMutations(['login'])  }  }
</script>

改变首页状态

通过 vuex 中保存的 hasLogin 判断是否是登录状态,从而显示不同的内容。

<template>  <view class="page">  <view v-if="!hasLogin">现在是未登录状态,点击按钮进行登录</view>  <view v-else>现在是登录状态,您的用户id是:{{uerInfo.userName}}</view>  <button type="primary" @click="bindLogin">{{hasLogin ? '退出登录' : '登录'}}</button>  </view>
</template>
<script>  import {  mapState,  mapMutations  } from 'vuex';  export default {  computed: mapState(['hasLogin','uerInfo']),  methods: {  ...mapMutations(['logout']),  bindLogin() {  if (this.hasLogin) {  this.logout()  } else {  uni.navigateTo({  url: '/pages/login/login'  })  }  }  }  }
</script>

再次进入应用

在 App.vue 中判断用户是否保存用户信息 "uerInfo",如果保存则认为是登录状态,未保存则为未登录状态。

App.vue 中得到用户信息后需要同步改变 vuex 的状态,使所有页面都能共享登陆状态与用户信息。

复制代码<script>  import {  mapMutations  } from 'vuex';  export default {  onLaunch: function () {  uni.getStorage({//获得保存在本地的用户信息  key: 'uerInfo',  success:(res) => {  this.login(res.data);  uni.request({// 再次校验并刷新token的有效时间  url: `${this.$serverUrl}/auth.php`,  header: {  "Content-Type": "application/x-www-form-urlencoded",  "Token":res.data.token  },  data: {  "username":res.data.user_name  },  method: "POST",  success: (e) => {  if (e.statusCode === 200 && e.data.code === 0) {  this.login(e.data);  }  }  })  }  });  },  methods: {  ...mapMutations(['login'])  }  }
</script>

uni-app 中保持用户登录状态 - DCloud问答uni-app 中保持用户登录状态 - 在应用中保持登录状态是一个应用常见的需求,本文简单介绍下在 uni-app 中如何保存用户登录状态。 简介uni-app 中不支持读写 cookie,所以不能如传统的应用那样通过读取 cookie 来判断是否是登录状态。 在 uni-app 进行...https://ask.dcloud.net.cn/article/35661demo:DAccount Service

uniapp app端登录相关推荐

  1. uni-app APP端-微信登录流程

    uni-app APP端-微信登录流程 手把手教学 1.前期准备 在微信开放平台注册账户 微信开放平台 (qq.com) 在管理中心中创建移动应用项目,按要求填写相关信息 审核通过后即可获得我们所需的 ...

  2. uniApp APP端调起微信支付失败errCode:-100的踩坑

    使用了在开放平台配置好包名和签名后调试,在有的机型上通过调试可以调起微信支付,但是打包成apk就调起失败,有一种可以成功的结果,反向推断出代码肯定没有问题.但是控制台报errCode:-100的错. ...

  3. uniapp App端使用高德地图

    uniapp App端使用高德地图 第一步: 先去高德官网申请keyhttps://console.amap.com/dev/key/app 关于SHA1生成方法如下:https://lbs.amap ...

  4. Flask后端实践 连载十六 Flask实现微信Web端及APP端登录注册

    Flask后端实践 连载十六 Flask实现微信Web端及APP端登录注册 tips: 本文将实现微信Web端和APP端登陆注册 本文基于python3编写 代码仓库 项目场景 某天,项目经理说,项目 ...

  5. uniapp APP端视频轮播问题

    uniapp APP端视频轮播问题(黑屏,变形) 今天接到一个需求:需要在商品详情轮播展示视频,本以为很简单,但是发现好多坑,在app端出现黑屏,卡顿,变形,视频只展示半屏的情况. 完整代码放底下了 ...

  6. uniapp app端使用html2canvas和renderjs实现生成海报图

    uniapp app端使用html2canvas和renderjs实现生成海报图 原本app端是无法使用html2canvas的因为,app端不支持浏览器js. 不过我在uniapp里面看到了rend ...

  7. uniApp App端跳转到深色页面闪白记录及优化处理方法

    此方法仅针对App端 (IOS 未测试). 问题产生 从亮色页面切换到深色页面,切换过程中会先出来白底(闪一下),然后才会出现页面内容. 一般首次打开深色页面时候不会出现,二次进入深色页面才会出现以上 ...

  8. uni-app APP端引入echart

    公司要做app,选型选的uni-app,奈何之前没接触过. 一步一步摸索着把框架搭建好了,发现app中有图表,那我图表又用什么呢? 又去翻文档,又是百度的. 最后还是在 官方找到合适的答案 EChar ...

  9. uniapp APP端运行报错 cid unmatched at view.umd.min.js:1

    最近写的一个IM即时通讯系统差不多算是完善了,在h5端调试着一般都没有什么很难搞的bug.然而就在昨天,将项目运行到模拟器时聊天界面获取历史记录消息并渲染在页面上时,却报了一堆很奇怪的错误 cid u ...

  10. uniapp App端后台间隔时间发送定位功能实现

    文章目录 前言 一.核心api 二.代码实现 1.locationWatcher.js: 2.页面引用 运行结果 三.注意事项 前言 uniapp开发app端时候,某些业务场景需求:在后台不间断(间隔 ...

最新文章

  1. 【leetcode】987. Vertical Order Traversal of a Binary Tree
  2. Linux的默认给home分配多少,Linux 分配/home的磁盘空间给根目录
  3. STM32F103ZET6 蜂鸣器、按键
  4. java编程九九乘法表_如何用JAVA语言编写一个九九乘法表
  5. Spring mvc 异常处理
  6. 什么是AWT_Swing_Scroll面板,上!!!
  7. java小游戏跳棋_Java跳棋小游戏源代码
  8. 多多计算机分屏版本怎么使用,电脑双屏幕怎么设置_电脑分屏怎么设置方法
  9. 基于php的地铁查询系统,动手构建地铁关系网,实现最短路径查询
  10. 联想小新Win11系统如何将新建标签页设置为Edge浏览器首页
  11. bzoj 3162: 独钓寒江雪 树形dphash
  12. 北京迎来首场降雪 正逢国内观赏雪景好去处
  13. 米豆网首页快照不更新原因分析
  14. rpmbuild打包任意文件及目录制作为rpm文件
  15. 串口和TCP互相转发工具
  16. SAP HANA基本数据类型
  17. NFT价值及白皮书获取
  18. php蓝牙配对,有用bluez做蓝牙配对吗
  19. java nullable,Nullable类型作为通用参数可能吗?
  20. C# 开发USB通信、串口通信、Socket通信(适用于打印机的指令操作等)

热门文章

  1. js逐步教你实现原生汇率计算器系统(html逻辑 css逻辑 js逻辑)
  2. 球面投影 (立体和柱面的投影效果)
  3. 通过AT指令将air202 接入阿里云
  4. 为什么计算机无法访问u盘,WIN10系统无法访问U盘怎么处理_win10电脑u盘无法访问拒绝访问如何解决-win7之家...
  5. 菜鸟版JAVA设计模式—从笔记本电源线看适配器模式
  6. K3WISE老单序时簿开发示例:增加功能性按钮
  7. BIM技术之Dynamo图元编程:柱、球面坐标系节点绘制螺旋线
  8. 循环冗余校验码CRC原理与LFSR循环码编码器原理
  9. 心中无码便是高清,用“脑补”除马赛克!
  10. vmware ubuntu 内存不够解决方案