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

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

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

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

查看下一篇


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

相关文章
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
3858 12
|
缓存 Java 开发工具
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
三级缓存是Spring框架里,一个经典的技术点,它很好地解决了循环依赖的问题,也是很多面试中会被问到的问题,本文从源码入手,详细剖析Spring三级缓存的来龙去脉。
2231 24
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
|
存储 缓存 小程序
微信小程序数据缓存与本地存储:优化用户体验
本文深入探讨微信小程序的数据缓存与本地存储,介绍其意义、机制及应用场景。通过合理使用内存和本地缓存,可减少网络请求、提升加载速度和用户体验。文中详细讲解了常用缓存API的使用方法,并通过一个新闻列表案例展示了缓存的实际应用。最后提醒开发者注意缓存大小限制、时效性和清理,以确保最佳性能。
|
小程序 前端开发 算法
|
存储 缓存 Dart
Flutter&鸿蒙next 封装 Dio 网络请求详解:登录身份验证与免登录缓存
本文详细介绍了如何在 Flutter 中使用 Dio 封装网络请求,实现用户登录身份验证及免登录缓存功能。首先在 `pubspec.yaml` 中添加 Dio 和 `shared_preferences` 依赖,然后创建 `NetworkService` 类封装 Dio 的功能,包括请求拦截、响应拦截、Token 存储和登录请求。最后,通过一个登录界面示例展示了如何在实际应用中使用 `NetworkService` 进行身份验证。希望本文能帮助你在 Flutter 中更好地处理网络请求和用户认证。
873 1
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
270 3
|
缓存 Python
在Python中,`functools`模块提供了一个非常有用的装饰器`lru_cache()`,它实现了最近最少使用(Least Recently Used, LRU)缓存策略。
在Python中,`functools`模块提供了一个非常有用的装饰器`lru_cache()`,它实现了最近最少使用(Least Recently Used, LRU)缓存策略。
357 10