【微信小程序-原生开发】实用教程11 - 用户登录鉴权(含云函数的创建、删除、使用,通过云函数获取用户的openid)

此篇可在实用教程10(见下方链接)的基础上继续开发,也可以在任何微信小程序中直接使用。
https://blog.csdn.net/weixin_41192489/article/details/128835069

用户登录鉴权逻辑

在这里插入图片描述

核心技术:通过云函数获取用户的openid

要想使用云函数,需先开通并初始化云环境,可参考下方链接进行配置
https://blog.csdn.net/weixin_41192489/article/details/128797403

创建云函数 get_openid

在 cloudfunctions 文件夹上点击鼠标右键的快捷菜单中选择新建 Node.js 云函数
【微信小程序-原生开发】实用教程11 - 用户登录鉴权(含云函数的创建、删除、使用,通过云函数获取用户的openid)_第1张图片
命名为 get_openid,便会自动生成默认的云函数。

cloudfunctions\get_openid\config.json

{
  "permissions": {
    "openapi": [
    ]
  }
}

cloudfunctions\get_openid\index.js

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
}) // 使用当前云环境
// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}

cloudfunctions\get_openid\package.json

{
  "name": "get_openid",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "wx-server-sdk": "~2.6.3"
  }
}

上传部署云函数

在目标云函数上右键快捷菜单选择上传并部署

【微信小程序-原生开发】实用教程11 - 用户登录鉴权(含云函数的创建、删除、使用,通过云函数获取用户的openid)_第2张图片
云函数前的文件夹变成绿色,即表示部署成功。

删除云函数

仅在本地无法删除云函数,需先去微信云函数控制台删除该云函数才行!
【微信小程序-原生开发】实用教程11 - 用户登录鉴权(含云函数的创建、删除、使用,通过云函数获取用户的openid)_第3张图片
云端删除后,回到本地同步云函数列表
【微信小程序-原生开发】实用教程11 - 用户登录鉴权(含云函数的创建、删除、使用,通过云函数获取用户的openid)_第4张图片
此时该云函数的文件夹从绿色变成灰色,右键快捷菜单删除即可。
【微信小程序-原生开发】实用教程11 - 用户登录鉴权(含云函数的创建、删除、使用,通过云函数获取用户的openid)_第5张图片

使用云函数

  getOpenID() {
    return new Promise((resolve) => {
      wx.cloud.callFunction({
        name: 'get_openid' // 云函数的名称
      }).then(res => {
        // 从云函数返回的结果中提取出目标数据
        resolve(res.result.openid);
      })
    })
  },

小程序启动时,开始用户登录鉴权

app.js 的 onLaunch 中

  // 生命周期--小程序启动时执行
  async onLaunch() {
  	    const openid = await this.getOpenID();
        this.login(openid)
  }

用户登录鉴权的实现

app.js

  login(openid) {
    let that = this
    wx.cloud.database().collection('user').where({
      _openid: openid
    }).get().then(res => {
      // 查询openid是否已注册(是否在 user 表中)
      let data = res.data
      if (data.length > 0) {
        let userInfo = data[0]

        // 判断openid是否审核通过(有No)
        if (userInfo.No) {
          // 审核通过,保持进入页,将用户信息写入缓存
          wx.setStorageSync('userInfo', userInfo)
        } else {
          // 已注册但待审核,跳转到注册页查看审核状态
          that.gotoRegister("已注册")
        }
      } else {
        // 未注册,跳转到注册页注册
        that.gotoRegister("注册")
      }
    })
  },
  gotoRegister(type) {
    wx.reLaunch({
      url: '/pages/register/index?type=' + type
    })
  },

你可能感兴趣的:(微信小程序,#,已归档链接,微信小程序,javascript,小程序)