微信小程序登陆封装(自用版)欢迎指正

微信小程序登陆封装(自用版)欢迎指正

韩小韩
2022-06-23 / 0 评论 / 1,423 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年06月23日,已超过682天没有更新,若内容或图片失效,请留言反馈。

index.wxml

<!-- 登陆组件弹窗 -->
<van-popup show="{{ loginBtn }}" round position="bottom" custom-style="height: 24%" bind:close="onClose" duration="246">
  <view class="loginPanel">
    <view class="panel-title">我想要你的头像和昵称,可以嘛~</view>
    <view class="panel-btns">
      <van-button type="info" round bind:click="onClose">不可以</van-button>
      <van-button type="primary" round bind:click="_login">好的</van-button>
    </view>
  </view>
</van-popup>
<!-- 内容 -->
<block wx:if="{{!loginShow}}">
  <view class="loginok">
    <view>韩小韩博客 wwww.vvhan.com</view>
    <view>登录成功</view>
    <image src="{{userInfo.avatarUrl}}" mode="widthFix" />
    <view>Nick:{{userInfo.nickName}}</view>
    <view>OpenId:{{userInfo.openid}}</view>
  </view>
</block>
<block wx:else>
  <van-button class="loginbtn" plain type="info" bind:click="onClose">点击登录</van-button>
</block>

index.js

const app = getApp()
Page({
  data: {
    // 登陆按钮现实隐藏
    loginBtn: false,
    // 全局是否登陆
    loginShow: false,
    // 用户信息
    userInfo: {}
  },
  async onLoad() {
    const _res = await app._checkLogin()
    this.setData({
      loginBtn: _res,
      loginShow: _res,
      userInfo: app.globalData.userInfo
    })
  },
  // 登陆
  async _login() {
    const _res = await app._getUserInfo()
    _res && this.setData({
      userInfo: app.globalData.userInfo,
      loginBtn: false
    }), this.onLoad()

  },
  // 关闭登陆弹窗
  onClose(e) {
    this.setData({
      loginBtn: e.type == "click" ? !this.data.loginBtn : false
    })
  }
})

app.js

App({
  onLaunch: function () {
    // 全局变量
    this.globalData = {
      openId: wx.getStorageSync('openId'),
      userInfo: wx.getStorageSync('userInfo')
    };
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力');
    } else {
      wx.cloud.init({
        // env 参数说明:
        //   env 参数决定接下来小程序发起的云开发调用(wx.cloud.xxx)会默认请求到哪个云环境的资源
        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
        //   如不填则使用默认环境(第一个创建的环境)
        // env: 'my-env-id',
        traceUser: true,
      });
    }
    // 微信小程序获取版本更新
    const updateManager = wx.getUpdateManager()
    updateManager.onCheckForUpdate(function (res) {
      // 请求完新版本信息的回调
    })
    updateManager.onUpdateReady(function () {
      wx.showModal({
        title: '小韩提示',
        content: '新版来袭,速来体验!',
        success: function (res) {
          if (res.confirm) {
            updateManager.applyUpdate()
          }
        }
      })
    })
    updateManager.onUpdateFailed(function () {
      // 新版本下载失败
    });

    // 获取OpedId
    this._getOpenId()
  },
  // 获取用户OpenId
  _getOpenId() {
    ((this.globalData.openId || '') == '') && wx.cloud.callFunction({
      name: 'login'
    }).then(res => {
      this.globalData.openId = res.result.openid;
      wx.setStorageSync('openId', res.result.openid)
    }).catch(res => {
      console.error(res)
    });
  },
  // 判断是否登陆
  async _checkLogin() {
    const _this = this
    return new Promise((resolve) => {
      wx.checkSession({
        success: function (_res) {
          const _userInfo = wx.getStorageSync('userInfo');
          resolve((_userInfo || '') === '')
        },
        fail: async function (_res) {
          await wx.login({})
          resolve(true)
        }
      })
    })
  },
  // 获取用户信息并存储
  async _getUserInfo() {
    return new Promise((resolve) => {
      wx.getUserProfile({
        desc: 'get用户信息',
        success: async res => {
          res.userInfo.openid = this.globalData.openId
          this.globalData.userInfo = res.userInfo
          wx.setStorageSync('userInfo', res.userInfo)
          resolve(true)
        },
        fail: () => {
          resolve(false)
        }
      });
    })
  },
});
});
3

评论 (0)

取消