uni-app微信小程序保持登录状态(vuex和本地存储)

简介: uni-app微信小程序保持登录状态(vuex和本地存储)

我这个小白主要用的是vuex结合着uni-app自带的本地缓存调用

APIuni.setStorageSync('key', value)、uni.getStorageSync('key')

1、根目录新建store/index.js

import Vue from "vue";
import Vuex from "vuex"
Vue.use(Vuex);
const store = new Vuex.Store({
  state: {
    // 是否登录标识
    hasLogin: false,
    // 账号数据
    userInfo: {
      id: "",
      nikeName: '',
      userName: '',
      phone: '',
      avatarUrl: '',
      openId: '',
    }
  },
  mutations: {
    // login 登录
    login(state, userInfo) {
      // state.hasLogin = true;
      state.userInfo = userInfo;
      uni.setStorageSync('userInfo', userInfo)
    },
    // logout 注销
    logout(state) {
      state.userInfo = {};
      state.hasLogin = false;
      uni.clearStorageSync('userInfo');
    }
  }
})
export default store

2、main.js配置

20210527153548522.png

3、在需要使用的页面引入

<template>
  <view class="login">
    <view @click="hidenLoginPopup" class="login-popup">
      <view class="login-text">
        <text style="font-size: 28rpx;letter-spacing: 4rpx;">您還未登錄</text>
        <text style="font-size: 22rpx;color: #999;">相關操作涉及到用戶信息,請登錄后再試</text>
      </view>
      <view class="btn">
        <!-- <button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber" class="left-btn" size="mini" type="default"></button> -->
        <button @click.stop="goRegister" class="left-btn" type="default" size="mini">开户</button>
        <button @click.stop="goLogin" class="right-btn" size="mini" type="default">登录</button>
      </view>
    </view>
  </view>
</template>
<script>
import { mapMutations } from 'vuex';
export default {
  data() {
    return {
      code: '',
      areaId: '1',
      // 加密数据
      encryptedData: '',
      iv: '',
      rawData: '',
      signature: ''
    };
  },
  methods: {
    ...mapMutations(['login']),
    goRegister() {
      console.log('getuserinfo', !uni.getStorageSync('userInfo'));
      if (!uni.getStorageSync('userInfo')) {
        uni.getUserProfile({
          desc: '獲取您的昵稱、頭像、地區及性別',
          success: infoRes => {
            console.log('userInfo-res', infoRes);
            if (infoRes.errMsg === 'getUserProfile:ok') {
              uni.setStorageSync('encryptedData', infoRes.encryptedData);
              uni.setStorageSync('iv', infoRes.iv);
              uni.setStorageSync('signature', infoRes.signature);
              this.login(infoRes.userInfo);
              uni.navigateTo({
                url: '/platforms/mp-weixin/register/registerVersion'
              });
            } else {
              uni.showToast({
                title: '授權失敗',
                icon: 'error'
              });
            }
          },
          fail: err => {
            console.log('userInfo-err', JSON.stringify(err));
          }
        });
      } else {
        console.log('uni.navigateTo');
        uni.navigateTo({
          url: '/platforms/mp-weixin/register/registerVersion'
        });
      }
    },
    goLogin() {
      if (!uni.getStorageSync('userInfo')) {
        uni.getUserProfile({
          desc: '獲取您的昵稱、頭像、地區及性別',
          success: infoRes => {
            console.log('userInfo-res', infoRes);
            if (infoRes.errMsg === 'getUserProfile:ok') {
              uni.setStorageSync('encryptedData', infoRes.encryptedData);
              uni.setStorageSync('iv', infoRes.iv);
              uni.setStorageSync('rawData', infoRes.rawData);
              uni.setStorageSync('signature', infoRes.signature);
              this.login(infoRes.userInfo);
              uni.navigateTo({
                url: '/platforms/mp-weixin/register/registerVersion'
              });
            } else {
              uni.showToast({
                title: '授權失敗',
                icon: 'error'
              });
            }
          },
          fail: err => {
            console.log('userInfo-err', JSON.stringify(err));
          }
        });
      } else {
        uni.navigateTo({
          url: '/platforms/mp-weixin/register/registerVersion'
        });
      }
    },
    hidenLoginPopup() {
      this.$store.state.hasLogin = 1;
    }
  }
};
</script>
<style lang="scss">
</style>

20210527153548522.png

这个不是很完善,只是基本用法,我这个菜鸡还在研究中。。。。完善了回头就来修改


相关文章
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
262 0
|
9月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
359 5
|
10月前
|
缓存 小程序 开发工具
最新原创uniapp+vue3仿微信界面聊天app系统
最新原创研发uniapp+vue3实战跨端仿微信App界面聊天程序。支持运行到H5+小程序+APP端。
433 6
最新原创uniapp+vue3仿微信界面聊天app系统
|
9月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
11月前
|
存储 人工智能 Android开发
为什么微信发送的APP安装不了,.apk转化为.apk.1
微信发送的APP文件常被改为.apk.1格式导致无法安装,推荐使用夸克或QQ浏览器解决。
1741 14
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
4986 1
|
安全 算法 小程序
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
1023 28
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
|
小程序
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡
1091 1
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡
|
小程序 数据安全/隐私保护 开发者
【02】微信支付商户申请下户到配置完整流程-微信开放平台申请APP应用-微信商户支付绑定appid-公众号和小程序分别申请appid-申请+配置完整流程-优雅草卓伊凡
【02】微信支付商户申请下户到配置完整流程-微信开放平台申请APP应用-微信商户支付绑定appid-公众号和小程序分别申请appid-申请+配置完整流程-优雅草卓伊凡
1321 3
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
3947 12

热门文章

最新文章