黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码

简介: 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码
CSDN私信我,有关微信小程序的事情可以交流讨论,共同学习!

一、功能描述


由于微信官方更改了 getUserInfo、authorize 接口,无法弹出授权窗口,大家可以在微信小程序开发者工具
看到会提示接口过期。所以现在无法实现一进入微信小程序就弹出授权窗口,只能通过 button 组件点击之后触
发登录事件。
本登录模块还实现了用户信息缓存功能。

二、mine.wxml界面图片


登录前:

20190812233224120.png

点击登录后:

20190812233446128.png

三、mine.wxml代码


<view class="container">
  <!--用户信息-->
  <view class="category-item">
    <view class="personal-info">
      <view class="user-avatar">
        <image wx:if="{{userInfo}}" src="{{userInfo.avatarUrl}}"></image>
        <image wx:else src="/icons/wx_app_unline.png"/>
      </view>
      <view class="user-name">
        <view class="user-nickname">
        <text wx:if="{{userInfo}}">{{userInfo.nickName}}</text>
        <button class='in' wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo">登录/注册</button>
        </view>
        <view class="user-location">
          <open-data wx:if="{{userInfo}}" type="userCity" lang="zh_CN"></open-data>
        </view>
      </view>
    </view>
   </view>

四、mine.wxss代码


.container {
    background-color: #efeff4;
    width: 100%;
    height: 100%;
    flex-direction: column;
    display: flex;
    align-items: center;
    min-height: 100vh;
    color:#7F8389;
    font-size:24rpx;
}
.category-item {
    width: 100%;
    margin: 0 0 20rpx 0;
    border-top: 1rpx solid #d9d9d9;
    border-bottom: 1rpx solid #d9d9d9;
    background-color: #fff;
}
/*******************用户和相关操作*************************************/
/*用户*/
.personal-info {
    height: 130rpx;
    display: flex;
    padding: 20rpx 0;
}
.personal-info .user-avatar {
    margin: 0 30rpx;
    width: 130rpx;
    height: 130rpx;
    position: relative;
}
.personal-info .user-avatar image {
    vertical-align: top;
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left:0;
    border-radius: 50%;
}
.personal-info .user-name {
    margin-right: 30rpx;
    flex: 1;
    padding-top: 10rpx;
}
.user-name .user-nickname{
    color:black;
    font-size:36rpx;
}

五、mine.js代码


var app = getApp();
Page({
data: {
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo')
  },
  onLoad: function () {
    if (app.globalData.g_userInfo) {
      this.setData({
        userInfo: app.globalData.g_userInfo,
        hasUserInfo: true
      })
    } else if (this.data.canIUse) {
      app.userInfoReadyCallback = res => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    }
  },
  getUserInfo: function (e) {
    console.log("mine.js执行登录按钮事件")
    app.globalData.g_userInfo = e.detail.userInfo
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  }
  })

六、app.js代码


//app.js
App({
onLaunch: function () {
  this._getUserInfo();//加载登录函数
},
// 获取用户信息
_getUserInfo: function () {
  var userInfoStorage = wx.getStorageSync('user');//从缓存中取出用户信息
  if (!userInfoStorage) {//如果没有用户信息缓存
    var that = this;
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          wx.getUserInfo({
            success: res => {
              console.log("app.js调用api获取用户信息");
              that.globalData.g_userInfo = res.userInfo//设置app的全局变量
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
              wx.setStorageSync('user', res.userInfo)//设置用户信息缓存
            },
            fail: function (res) {
              console.log(res);
            }
          })
        }
      }
    })
  }
  else {
    console.log("app.js从缓存中获取用户信息");
    this.globalData.g_userInfo = userInfoStorage;//有用户信息缓存直接取出给全局变量
  }
},
globalData: {
  userInfo: null
}
})

七、源码怎么用?


app.js微信小程序是有固定位置的;

mine.wxml、mine.wxss、mine.js只要在同一个目录下就行,目录路径无所谓。

完成登录功能请把以上代码全复制粘贴过去。

本登录功能还实现了微信小程序的缓存功能。不缓存的微信小程序不是个小程序!缓存很重要!

查看下一篇


黯然微信小程序杂记(三):微信小程序实现倒计时功能 附讲解教学 附源码

相关文章
|
1月前
|
Android开发 开发者 Python
手撸了一个全自动微信清粉小工具(源码详解)
微信清理僵尸粉工具利用Python和`uiautomator2`库,通过模拟转账操作自动检测并标记微信好友列表中被删除、被拉黑或账号存在问题的“僵尸粉”。工具支持开启调试模式、自动打开微信、获取好友信息、判断好友状态、管理标签等功能,最终将检测结果记录到文件中,便于用户管理和清理好友列表。此工具适用于Android设备,已在OPPO Reno4 Pro上测试成功。
91 5
|
3月前
|
存储 JSON 小程序
微信小程序入门之新建并认识小程序结构
微信小程序入门之新建并认识小程序结构
65 1
ly~
|
4月前
|
存储 供应链 小程序
除了微信小程序,PHP 还可以用于开发哪些类型的小程序?
除了微信小程序,PHP 还可用于开发多种类型的小程序,包括支付宝小程序、百度智能小程序、抖音小程序、企业内部小程序及行业特定小程序。在电商、生活服务、资讯、工具、娱乐、营销等领域,PHP 能有效管理商品信息、订单处理、支付接口、内容抓取、复杂计算、游戏数据、活动规则等多种业务。同时,在企业内部,PHP 可提升工作效率,实现审批流程、文件共享、生产计划等功能;在医疗和教育等行业,PHP 能管理患者信息、在线问诊、课程资源、成绩查询等重要数据。
ly~
93 6
|
2月前
|
移动开发 小程序
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
73 3
|
2月前
|
小程序 前端开发 算法
|
4月前
|
缓存 Java 开发工具
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
三级缓存是Spring框架里,一个经典的技术点,它很好地解决了循环依赖的问题,也是很多面试中会被问到的问题,本文从源码入手,详细剖析Spring三级缓存的来龙去脉。
234 24
|
3月前
|
移动开发 前端开发 Android开发
开发指南059-App实现微信扫描登录
App是用uniapp开发的,打包为apk,上传到安卓平板中使用
|
3月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
1310 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
3月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
67 3
|
3月前
|
移动开发 小程序 数据可视化
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
59 2