实现微信小程序登录机制的必要性
1、标识用户身份,区分游客和注册用户行为,确保用户只能访问自己的数据,根据用户身份提供定制化内容
2、安全与权限控制:对于敏感操作(如:支付,个人信息修改等),需要用户进行身份确认,避免接口被恶意调用
3、记录用户操作路径和习惯,实现同一用户在多个小程序的数据同步,实现好友关系,用户互动等社交功能的基础
4、有利于商业价值提升,登录用户通常由更高的留存率,方便基于用户身份定向推送和营销,是构建积分,等级等会员系统的基础
基本登录流程
1、前端调用wx.login(),接口获取临时登录凭证code(有效期为5分钟)
uni.login({
success: (res) => {
if (res.code) {
// 发送code至后端
this.sendCodeToServer(res.code);
} else {
console.error('获取code失败:', res.errMsg);
}
}
});
2、发送code到服务器,服务器根据code生成用户的session标识(如token),并返回给小程序
3、小程序将token存储在本地,用于后续请求的身份验证
存储方案
1、加密Storage ,uni.setStorageSync('token', AES加密(token)),该存储方式适用于长期持久化存储的场景,即用户在登录操作之后较长一端时间内不必再重新进行登录操作
2、内存变量:getApp().globalData.token = token,利用全局变量的方式进行存储,适用于高频访问的临时存储的场景,用户每次进入小程序后都需要重新登录
3、混合方案:登录成功后进行加密Storage存储,在每次进入小程序时从本地存储中取出token,用全局变量存储,这样在本次使用小程序时就无需每次使用token都进行解密操作
后续身份验证
在每次加载小程序前,通过调用全局函数进行检查(验证函数只执行一次,执行之后可用一个全局状态变量保存目前是否为登录状态,避免重复验证做无用功,这里推荐在App.vue文件的onLaunch: function() {}中验证登录状态,因为这个是小程序的生命周期函数,在小程序初始化时被调用一次),验证本地token是否可用,可以通过试请求(即通过调用一些轻量级请求,比如请求用户信息)的方式,如果不可用,弹出弹窗,提示用户进行重新登录,获取新的token