IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 云开发实战-如何维护用户表?(优化版) -> 正文阅读

[JavaScript知识库]云开发实战-如何维护用户表?(优化版)

前言

之前写过一篇《云开发实战-如何维护用户表》,这种方式是最简单的,经过阅读了一些开源项目的代码,我优化了部分写法。

对比

优化前实现思路:

  1. 通过 login 云函数获取 openid 存放到本地
  2. 在授权信息的时候去添加 userInfo
  3. 根据 openid 去查询是否已经存储
  4. 没有查到就是新用户进行添加并存放 id 到本地
  5. 查看后老用户就根据 id 进行更新信息

优化后实现思路:

  1. 在 app.js 通过 queryCurrentUser 云函数查询 openid 是否在用户表
  2. 得到状态后存放在 app.js 的全局变量 authorized 属性里面
  3. 当需要用户授权的时候判断状态,没有就跳转到授权页面
  4. 进行授权调用 authorize 云函数添加用户

代码

  1. 在 app.js 通过 queryCurrentUser 云函数查询 openid 是否在用户表
  2. 得到状态后存放在 app.js 的全局变量 authorized 属性里面。
wx.cloud.callFunction({
    // 云函数名称
    name: 'user',
    // 传给云函数的参数
    data: {
      action: 'queryCurrentUser'
    }
  }).then(res => {
      if (res.result.errMsg === 'user.query.ok') {
        this.onAuthorized(res.result.data.userInfo);
        this.authorized = true;
      }
      wx.hideLoading();
    })
    
 onAuthorized(userInfo) {
    this.authorized = true;
    this.globalData.userInfo = userInfo;
  },
  

queryCurrentUser 云函数

async queryCurrentUser(context, params) {
    const {
      OPENID
    } = context;

    let res = await db.collection('users').where({
      openid: OPENID
    }).get();

    if (res.data.length === 0) {

      return {
        errMsg: 'user.query.none'
      };

    }

    return {
      errMsg: 'user.query.ok',
      data: {
        userInfo: res.data[0].userInfo
      }
    };

  },
  1. 当需要用户授权的时候判断状态,没有就跳转到授权页面
    index.js
toInfo(res) {
    if (app.authorized !== true) {
      wx.navigateTo({
        url: '/pages/authorize/authorize'
      });
      return;
    }
    // 省略业务代码....
  }
  1. 进行授权调用 authorize 云函数添加用户
    authorize.js
wx.cloud.callFunction({
    // 云函数名称
    name: 'user',
    // 传给云函数的参数
    data: {
      action: 'authorize',
      userInfo: userInfo
    }
  }).then(res => {

        if (res.result.errMsg === 'user.authorize.ok' || res.result.errMsg === 'user.authorize:authorized') {

          app.onAuthorized(res.result.data.userInfo);
          wx.showLoading({
            title: '授权成功'
          });
          setTimeout(() => {
            wx.hideLoading();
            app.navigateBack();
          }, 1000);
          return;

        }

        wx.nextTick(() => {
          wx.showToast({
            title: '授权失败',
            icon: 'none',
            duration: 1000
          });
        });

      });

authorize 云函数

const authorizedRes = {
  env: cloud.DYNAMIC_CURRENT_ENV,
  errMsg: 'user.authorize:authorized'
};

async authorize(context, params) {

    const {
      OPENID
    } = context;

    let getRes = await db.collection('users').where({
      openid: OPENID
    }).get();

    if (getRes.errMsg !== 'collection.get:ok') {

      return errorAuthorizeRes;

    }

    if (getRes.data.length > 0) {

      return authorizedRes;

    }

    let addRes = await db.collection('users').add({
      data: {
        openid: OPENID,
        userInfo: params.userInfo,
        authorizedTime: new Date(),
      }
    });

   

    return {
      errMsg: 'user.authorize.ok',
      data: {
        userInfo: params.userInfo
      }
    };

  }

总结

这种方式优点如下:

  1. 用云函数来验证,云函数可以直接获取 openid
  2. 通用统一的授权页面进行授权,这样就不需要在不同的地方写同样的授权代码
  3. 添加逻辑在云函数中实现,改小程序前端代码需要重新发版,云函数部署就行

代码需要不断优化才能更好。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:37:04  更:2021-12-01 17:38:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:05:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码