天天看點

基于雲開發完成小程式使用者注冊登入

小程式 · 雲開發已經上線到現在也已經快有兩年了,期間自己也基于雲開發釋出了幾個小程式,總得來說,對于前端開發者來說,确實友善了很多。不用買伺服器、域名,不需要搭建資料庫、靜态存儲應用。通過平台提供的簡 API 就可以進行核心業務的開發。

之前,如果我們想要開發一個小程式,運維人員需要考慮買什麼樣的伺服器,比對哪些資源,比如存儲應用、資料庫等,後端開發人員需要編寫服務接口,前端人員需要編寫頁面,對接後端提供的接口,這個工作流程下來,需要至少一個月的時間。有了“小程式 · 雲開發”以後,開發者不用考慮後端複雜的技術操作,一個前端開發者就可以輕松的完成從無到有、從開發到釋出的過程。

1 小程式注冊

如果之前注冊了小程式或者有小程式APPID的使用者可以直接忽略這步。

首先要去注冊個小程式,如果開發者工具選擇測試号,是不能體驗雲開發的。小程式注冊位址如下:

​​https://mp.weixin.qq.com/cgi-bin/registermidpage?action=index&lang=zh_CN&token=​​

選擇小程式

基于雲開發完成小程式使用者注冊登入

填寫注冊資訊,激活郵箱,填寫基本資訊後,在設定裡可以看到APPID。這裡需要說明下,一個企業最多可以注冊50個微信小程式;個體工商戶最多可以注冊5個小程式;

基于雲開發完成小程式使用者注冊登入

2 搭建基礎環境

上面我們已經有了小程式,接下來就是建立小程式基礎環境,下載下傳微信開發者工具:

​​https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html​​

首次登入或者長時間未使用,需要微信掃一掃登入,這樣才能拿到你的微信号是否有權限開發小程式。

建立小程式項目,選擇後端服務 -“小程式 · 雲開發”

基于雲開發完成小程式使用者注冊登入

等待項目初始化完成,目錄結構如下

├── /cloudfunctions/         # 雲函數
├── /miniprogram/            # 前端代碼
│ ├── /images/               # 圖檔等資源
│ ├── /pages/                # 頁面目錄
│ ├── /app.js                # 全局配置
│ ├── /app.json              # 全局配置
│ ├── /app.wxss              # 全局樣式檔案
├── /project.config.json     # 項目配置檔案
      
基于雲開發完成小程式使用者注冊登入

預設建立項目是沒有雲環境的,需要我們自己初始化,并建立環境名稱

基于雲開發完成小程式使用者注冊登入

項目裡使用建立的環境,在app.js檔案配置

onLaunch: function () {
  if (!wx.cloud) {
    console.error('請使用 2.2.3 或以上的基礎庫以使用雲能力')
  } else {
    wx.cloud.init({
      env: 'prd-yymsa'
      // env: 'dev-zvjun'
    })
  }
},      

我建立了兩個。一個是開發環境,一個是生産環境,并且一個小程式也隻能建立兩個,在之前,環境隻能建立,不能删除,現在也已經支援删除。

到這裡,我們基礎環境已經搭建完成,接下來就是如何編寫代碼了。

3 編寫邏輯代碼

1.擷取使用者

cloudfunctions目錄建立Node.js雲函數,名字getUser,内容如下

const cloud = require('wx-server-sdk')
  cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
  const db = cloud.database()
  exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext()
    return await db.collection('user').where({
      openid: wxContext.OPENID
    }).get().then(res => {
      return res
  })
 }
      

第一行,引入sdk

第二行,使用設定的雲函數環境

第三行,初始化db

第四行到最後,這裡面就是我們要寫的邏輯,這裡是傳回user表的指定openid的值

一個簡單的查詢使用者接口就完成了

2 新增使用者

cloudfunctions目錄建立Node.js雲函數,名字addUser,内容如下

const cloud = require('wx-server-sdk')
  cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
  const db = cloud.database()
  exports.main = async (event, context) => {
   const wxContext = cloud.getWXContext()
    return await db.collection('user').add({
      data: {
        openid: wxContext.OPENID,
        nickName: event.nickName,
       gender: event.gender,
       language: event.language,
       city: event.city,
       province: event.province,
       country: event.country,
       avatarUrl: event.avatarUrl,
       role: "user"
     },
   })
 }
      

這裡也不用過多解釋,第一、二、三行,都一樣、四行到最後是向user表插入資料。

3 更新使用者

cloudfunctions目錄建立Node.js雲函數,名字updateUser,内容如下

const cloud = require('wx-server-sdk')
  cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
  const db = cloud.database()
  exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext()
    return await db.collection('user').where({
      openid: wxContext.OPENID
    })
      .update({
       data: {
         nickName: event.nickName,
         gender: event.gender,
         language: event.language,
         city: event.city,
         province: event.province,
         country: event.country,
         avatarUrl: event.avatarUrl
       },
     })
 }      

代碼基本和新增使用者一樣,隻不過是我們這次要在插入的是指定openid的值。

到這裡,新增、修改、查詢接口已經完成了、接下來就是我們寫前端調用了。

4 編寫調用代碼

如果都看到這了,說明你是需要的,那說明你的小程式肯定也有使用者個人中心頁面,

基于雲開發完成小程式使用者注冊登入

我的邏輯是,使用者如果首次使用小程式,則需要登入,如果不是,之後就不在需要點選登入,直接擷取使用者資訊,畢竟雲開發是可以直接擷取使用者openid,

gologin(e) {
  let that = this
  wx.cloud.callFunction({
    name: 'getUser',
  }).then(res => {
    if (res.result.data == '') {
      wx.cloud.callFunction({
        name: 'addUser',
        data: {
          nickName: e.detail.userInfo.nickName,
          gender: e.detail.userInfo.gender,
          language: e.detail.userInfo.language,
          city: e.detail.userInfo.city,
          province: e.detail.userInfo.province,
          country: e.detail.userInfo.country,
          avatarUrl: e.detail.userInfo.avatarUrl
        }
      }).then(addres => {
        that.setData({
          userInfo: e.detail.userInfo
        })
        wx.setStorageSync('userInfo', JSON.stringify(e.detail.userInfo))
      })
    } else {
      that.setData({
        userInfo: res.result.data[0]
      })
      wx.setStorageSync('userInfo', JSON.stringify(res.result.data[0]))
    }
  })
},
      

這個方法也比較簡單,先去查詢使用者,如果沒有,我就新增,如果有,就快取區域。更新的方法就不展示了,用法基本一樣。

簡單了解,就是騰訊雲把小程式開發的服務端已經搭好,開發者看不到、也不需要看到背景架構如何搭建,更不用操心背景的穩定性和安全性問題,直接調用接口,寫小程式端代碼就可以了。