小程序登录
小程序的请求一般都需要携带token,请求携带token可以在网络请求一文中查看统一处理的方式。
小程序token的获取需要通过wx.login()接口 获取登录凭证,也就是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()
...
}