小程序(六)小程序获取用户信息

这篇博客详细介绍了在微信小程序中如何处理用户信息授权的过程。作者分享了从最初的弹窗方式到新版的按钮触发方式的转变,并提供了相关代码示例,包括在onShow中检查用户信息,以及如何在用户拒绝授权时进行提示。此外,还展示了页面的WXML和WXSS代码,用于展示授权页面和正常页面。最后,作者鼓励读者分享反馈。
摘要由CSDN通过智能技术生成

小程序获取用户信息这部分其实不难,但是,他有点麻烦。

最开始,在小程序的app.js中的onlaunch中判断如果当前登录用户,数据库中没有用户信息,则直接调用wx.getUserInfo,弹窗获取用户信息。

但是小程序改版之后,不支持这种调用方式,官方给出的demo是使用一个button按钮来调起wx.getUserInfo这个方法来获取用户信息。

用习惯了弹窗的我,突然碰到这种方式还有点不习惯,那玩意就一个按钮,用户岂不是点不点都行了?

后来一寻思,这不死心眼了么,弹窗改按钮,其实道理上是一样的。

弹窗是判断没有用户信息弹窗

按钮,那你就判断没有用户信息,调转到一个只有获取信息按钮的页面,让他点,不点授权就用不了不就完了么。

类似我这样:

在这里插入图片描述

授权的代码就很简单了,新建项目的时候,示例程序已经给你带了:我这里放一下的页面的示例:

Im.js

// pages/im/im.js
//获取应用实例
const app = getApp();
  
Page({
  
  /**
   * 页面的初始数据
   */
  data: {
    // 是否显示授权
    isHide:false,
    // 用户id
    user_id:'',
    // 用户头像
    figureurl_wx:'',
    nickname:'',
    // 是否显示
    is_show:0,
  },
  
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
     
  },
  
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
  
  },
  
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    var self = this;
    // 底部自定义菜单显示
    if (typeof this.getTabBar === 'function' && this.getTabBar()) {
      this.getTabBar().setData({
        selected: 1    // 根据tab的索引值设置
      })  
    }
    var self = this;
    self.getUseridFromStorage();
    self.setData({
      is_show:self.data.is_show
    });
  
  },
  
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
  
  },
  
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
  
  },
  
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
  
  },
  
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
  
  },
  
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
  
  },
  
  /**
   * 从缓存中获取用户信息
   */
  getUseridFromStorage:function()
  {
    var self = this;
    // 从缓存中获取用户id
    wx.getStorage({
      key: 'userinfo',
      success (res) {
        self.data.user_id = res.data.id;
        self.data.figureurl_wx = res.data.figureurl_wx;
        self.data.is_show = res.data.is_show;
        self.data.nickname = res.data.nickname;
        // 判断当前用户是否授权,没授权显示授权页面
        if(self.data.figureurl_wx == '')
        {
          self.data.isHide = true;
        }
        else
        {
          self.data.isHide = false;
        }
        self.setData({
          isHide:self.data.isHide
        });
      }
    });
  },
  
  /**
   * 更新用户缓存
   */
  updateUserinfo:function(obj)
  {
    var self = this;
    // 同步更新缓存
    wx.setStorage({
      key:"userinfo",
      data:obj
    });
    // 异步获取缓存
    self.getUseridFromStorage();
  },
  
  /**
   * 点击用户授权
   */
  getUserInfo: function(e) {
    var self = this;
    // 点击了拒绝
    if(e.detail.errMsg == "getUserInfo:fail auth deny")
    {
      wx.showToast({
        title:'请您授权!',
        icon: 'loading ',//图标,支持"success"、"loading" 
        // image: '/images/load.gif',
        duration: 1500,//提示的延迟时间,单位毫秒,默认:1500 
        mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false 
      });
      return;
    }
    var userinfo = e.detail.userInfo
    // 从storage中获取用户信息
    wx.getStorage({
      key: 'userinfo',
      success (res) {
        // 请求后台接口完善个人信息
        wx.request({
          // 请求连接
          url: 'xxxxxxxx',
          // 请求所需要的的参数
          data: {
            data: userinfo,
            user_id:res.data.id
          },
          success(result){
            self.updateUserinfo(result.data.userinfo);
          }
        });
      }
    })
    app.globalData.userInfo = e.detail.userInfo
  
  },
  /**
   * AI聊天跳页
   */
  jumpToAiChat:function()
  {
    // 清除聊天缓存
    wx.removeStorage({
      key: 'newsList',
      success: function(res) {},
    });
    let jumpUrl = "../aichat/aichat?openid="+this.data.nickname+'&&figureurl_wx='+this.data.figureurl_wx;
    this.jumpPage(jumpUrl);
  },
   
   
})

Im.wxml

<!--pages/im/im.wxml-->
<!-- 微信授权页面 -->
<view wx:if="{{isHide}}" >
  <view class='header'>
    <image src='https://guanchao.site/uploads/website/5c093bf268185.png'></image>
  </view>
  <view class='content'>
    <view>时间里的 申请获取以下权限</view>
    <text>获得你的公开信息(昵称、头像、地区及性别)</text>
  </view>
  <button  class='bottom'  open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="getUserInfo">
    授权登录
  </button>
</view>
<!-- 正常页面,使用if-else控制 -->
<view wx:else class="container top_view" >
    <view class="button_view" bindtap="jumpToAiChat">
      AI聊天
    </view>
  
    <view class="button_view margin10" bindtap="jumpToLiveChat">
      即时聊天
    </view>
  
    <view class="button_view margin10" bindtap="jumpToLiveGame">
      即时猜拳
    </view>
</view>

Im.wxss

/* pages/im/im.wxss */
/* 登录授权部分 */
.pageld{ 
  /* width: 100%; */
  /* height: 95%; */
  /* background-color: #F2F2F2; */
  /* margin-top: -45px; */
}
.header {
  margin: 90rpx 0 90rpx 50rpx;
  border-bottom: 1px solid #ccc;
  text-align: center;
  width: 650rpx;
  height: 300rpx;
  line-height: 450rpx;
}
  
.header image {
  width: 200rpx;
  height: 200rpx;
}
  
.content {
  margin-left: 50rpx;
  margin-bottom: 90rpx;
}
  
.content text {
  display: block;
  color: #9d9d9d;
  margin-top: 40rpx;
}
  
.bottom {
  border-radius: 20rpx;
  margin: 70rpx 50rpx;
  font-size: 35rpx;
  background-color: #31869B;
  color:white;
}
  
/*列表按钮部分*/
.top_view{
  margin-top: 70px;
  font-weight: bold;
}
  
.button_view{
  height: 25px;
  padding: 8px;
  padding-left: 50px;
  padding-right: 50px;
  cursor: pointer;
  background-color: #31869B;
  color: #FFFFFF;
  border: 1px solid #31869B;
  border-radius: 6px;
  width: 150px;
  text-align: center;
}
.margin10{
  margin-top: 30px;
}

以上就是我在上边动图中的页面的所有代码。很简单,有需要的同学可以参照一下。

有好的建议,请在下方输入你的评论。

欢迎访问我的小程序:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值