小程序登录

小程序的请求一般都需要携带token,请求携带token可以在网络请求一文中查看统一处理的方式。
小程序token的获取需要通过wx.login()接口open in new window 获取登录凭证,也就是code,通过这个code传递给后端去换取token。
通过wx.login接口可以获取到用户的唯一标识(unionId)

登录函数封装

// api/user.js
// 获取code 部分接口需要使用wx.login()返回的code,所以这边将wx.login()封装一下
getCode () {
  return new Promise(resolve => {
    wx.login({
      success: (res) => {
        // doSomething
        resolve(res)
      }
    })
  })
},
// 获取token
getToken () {
  let url = 'wxLogin'
  return new Promise(async (resolve, reject) => {
    const app = getApp()
    // 如果已经登陆过存在token,就不需要再请求接口了
    if (app.globalData.token) {
      resolve('')
      return
    }
    let result = await module.exports.getCode()
    request.post(url, { code: result.code }, true).then(res => {
      console.log('%c loginRes', 'color: red;font-weight: bold', res)
      let loginRes = res
      if (loginRes.code === 0) {
        app.globalData.token = loginRes.result.token
        app.globalData.cToken = loginRes.result.cToken || '' // 中台的token
        resolve(loginRes)
      } else {
        reject(res)
      }
    })
  })
},

















 
 
 
 
 














app.js 引用

WARNING

这边导出的getToken不要写成userApi.getToken()
userApi.getToken(),整个生命周期只会触发一次,如果token过期,即使清空token也不会重新发起请求了

const { userApi } = require('./api/index')
App({
  getToken: userApi.getToken,
  ...
})

页面引用

在页面发起请求之前需要先去检查token是否存在,调用一下app.getToken即可

onLoad: async function (options) {
  ...
  await app.getToken()
  ...
}
Last Updated: 5/11/2023, 2:32:13 AM
Contributors: congqianv