封装登录功能:模板复用方式
通过 wxlogin(布尔值)状态来处理是否登录,以及显示和隐藏
检测登录状态的方法
一、 登录:
- 允许授权:
//处理允许登录的功能 processLogin(e) { console.log('点击允许获取用户信息:',e) if (!e.detail.userInfo) { wx.showToast({ title: '已取消', icon: 'none', }) return; }
//调用register方法将用户信息存入后台数据库
AUTH.register(this);
},
//存入用户数据到后台数据库 async function register(page) { console.log('register::::',this) let _this = this;
//调用wx.login获取code凭证 wx.login({
success: function (res) { let code = res.code; // 微信登录接口返回的 code 参数,下面注册接口需要用到
//获取用户信息
wx.getUserInfo({
success: function (res) {
console.log('wx.getUserInfo:',res)
let iv = res.iv;
let encryptedData = res.encryptedData;
let referrer = '' // 推荐人
let referrer_storge = wx.getStorageSync('referrer');
if (referrer_storge) {
referrer = referrer_storge;
}
// 下面开始调用注册接口,写入后台数据库
//接口文档:https://api.it120.cc/doc.html#/%E5%89%8D%E7%AB%AFapi%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/registerComplexUsingPOST_15
WXAPI.register_complex({
code: code,
encryptedData: encryptedData,
iv: iv,
referrer: referrer
}).then(function (res) {
//写入数据库成功后,调用自己封装的login方法
_this.login(page);
})
}
})
}
}) }
//login登录方法,从后台数据库读取用户写,并onshow重新展示
async function login(page){ const _this = this wx.login({ success: function (res) { console.log('开始登录啦!',res) WXAPI.login_wx(res.code).then(function (res) {
console.log('获取code',res)
if (res.code == 10000) { // 去注册 //_this.register(page) return; } if (res.code != 0) { // 登录错误 wx.showModal({ title: '无法登录', content: res.msg, showCancel: false }) return; } wx.setStorageSync('token', res.data.token) wx.setStorageSync('uid', res.data.uid) if ( page ) { page.onShow() } }) } }) }
2.// 检测登录状态,返回 true / false async function checkHasLogined() { const token = wx.getStorageSync('token') if (!token) { return false } const loggined = await checkSession() if (!loggined) { wx.removeStorageSync('token') return false } const checkTokenRes = await WXAPI.checkToken(token) if (checkTokenRes.code != 0) { wx.removeStorageSync('token') return false } return true }
-
获取用户信息: _this.getUserApiInfo();
//获取登录后的用户信息 getUserApiInfo: function () { var that = this;
//获取用户信息,当然可以自己封装userDetail接口来获取 WXAPI.userDetail(wx.getStorageSync('token')).then(function (res) { console.log('用户详情:::',res); if (res.code == 0) { let _data = {} _data.apiUserInfoMap = res.data if (res.data.base.mobile) { _data.userMobile = res.data.base.mobile } if (that.data.order_hx_uids && that.data.order_hx_uids.indexOf(res.data.base.id) != -1) { _data.canHX = true // 具有扫码核销的权限 } that.setData(_data); } })
展现到个人中心的页面上(包括用户名和头像)
4.登录后获取个人资产: _this.getUserAmount();
//封装用户个人资产方法(包括余额,积分。。。。。) getUserAmount: function () { var that = this;
//调用封装的获取用户信息的请求接口,也可自己按照咱们自己的封装去请求
WXAPI.userAmount(wx.getStorageSync('token')).then(function (res) {
console.log('用户',res)
if (res.code == 0) {
that.setData({
balance: res.data.balance.toFixed(2), //处理成保留两位小数的余额
freeze: res.data.freeze.toFixed(2),
score: res.data.score,
growth: res.data.growth
});
}
})
}
退出登录:
loginOut(){
//清缓存
AUTH.loginOut()
//跳转到我的页面
wx.reLaunch({
url: '/pages/my/index'
})
}