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

简介: 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码
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只要在同一个目录下就行,目录路径无所谓。

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

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

查看下一篇


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

相关文章
|
2月前
|
存储 JSON 小程序
微信小程序入门之新建并认识小程序结构
微信小程序入门之新建并认识小程序结构
53 1
ly~
|
3月前
|
存储 供应链 小程序
除了微信小程序,PHP 还可以用于开发哪些类型的小程序?
除了微信小程序,PHP 还可用于开发多种类型的小程序,包括支付宝小程序、百度智能小程序、抖音小程序、企业内部小程序及行业特定小程序。在电商、生活服务、资讯、工具、娱乐、营销等领域,PHP 能有效管理商品信息、订单处理、支付接口、内容抓取、复杂计算、游戏数据、活动规则等多种业务。同时,在企业内部,PHP 可提升工作效率,实现审批流程、文件共享、生产计划等功能;在医疗和教育等行业,PHP 能管理患者信息、在线问诊、课程资源、成绩查询等重要数据。
ly~
81 6
|
25天前
|
小程序 前端开发 算法
|
2月前
|
移动开发 前端开发 Android开发
开发指南059-App实现微信扫描登录
App是用uniapp开发的,打包为apk,上传到安卓平板中使用
|
2月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
665 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
2月前
|
移动开发 小程序 数据可视化
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
43 2
|
2月前
|
小程序 算法 前端开发
微信小程序---授权登录
微信小程序---授权登录
83 0
|
2月前
|
小程序 前端开发 数据可视化
微信商城小程序WeiMall
微信商城小程序WeiMall
33 0
|
3月前
|
小程序 前端开发 API
微信小程序 - 调用微信 API 回调函数内拿不到 this 问题(解决方案)
本文讨论了在微信小程序中调用API回调函数时无法获取到`this`上下文的问题,并提供了解决方案。在回调函数中,使用一个变量(如`that`)来保存当前的`this`引用,然后在回调内部使用这个变量来访问当前页面的数据和方法。
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
551 7