背景
下方代码是微信小程序中一个登录功能的核心实现,主要通过用户手机号码完成登录,并引导用户订阅消息。为了让普通读者也能理解它的逻辑,我会用生活中的例子来类比说明。
功能拆解与通俗解释
1. 检查用户是否同意服务条款和隐私协议
if (!this.checked[0]) { uni.$u.toast("请先同意服务条款和隐私协议"); return; }
- 通俗解释:
- 假设你去餐厅吃饭,服务员会问你:“您是否同意我们的用餐规则?” 如果你不点头同意,他们就不会给你上菜。
- 这里的
this.checked[0]
就像你点头的动作。如果用户没有勾选“同意服务条款和隐私协议”,程序就会弹出提示:“请先同意服务条款和隐私协议”,然后停止后续操作。
2. 获取用户手机号码并登录
const { code, encryptedData, iv } = ev.detail;
const res = await login({ sjhm: code, yzm: "001", });
const { user_info, accessToken } = res.data;
setToken(accessToken);
uni.setStorageSync("user_info", user_info);
- 通俗解释:
- 用户点击“手机号快捷登录”按钮后,微信会返回一些加密数据(
code
、encryptedData
和iv
),这些数据就像你的身份证号码,用于证明你是谁。 - 程序把这些数据发送到后台服务器进行验证(调用
login
接口)。后台验证通过后,会返回两个重要的东西:- 用户信息(
user_info
):相当于你的会员卡,记录了你的身份信息。 - 访问令牌(
accessToken
):相当于一张临时通行证,用来证明你已经登录成功。
- 用户信息(
- 程序会把这两个东西存储起来,方便后续使用。
- 用户点击“手机号快捷登录”按钮后,微信会返回一些加密数据(
3. 根据用户类型跳转页面
const userInfo = uni.getStorageSync('user_info');
if (userInfo.yhlx === '2') {
uni.reLaunch({ url: "/pages/index/indexHb" });
} else {
uni.reLaunch({ url: "/pages/index/index" });
}
- 通俗解释:
- 不同类型的用户看到的内容可能不一样。比如,普通会员和 VIP 会员进入餐厅后,可能会被引导到不同的包间。
- 这里的
yhlx
就是用来区分用户类型的字段:- 如果是
2
,就跳转到特殊首页(indexHb
)。 - 否则,跳转到普通首页(
index
)。
- 如果是
4. 微信登录并请求订阅消息
wx.login({
success: function(res) {
if (res.code) {
console.log('登录凭证:', res.code);
getWxCode({ code: res.code });
}
},
fail: function(err) {
console.error('调用wx.login失败:', err);
},
complete() {
uni.showModal({
title: '温馨提示',
content: '为了更好的让您了解到预警信息,需要您同意订阅服务',
confirmText: "同意",
cancelText: "拒绝",
success: function(res) {
if (res.confirm) {
uni.requestSubscribeMessage({
tmplIds: ['模板id'],
success(res) {
console.log(res);
},
fail(err) {
console.log(err);
},
complete() {}
});
}
}
});
}
});
- 通俗解释:
- 微信登录:
- 微信登录就像你在餐厅门口领了一张入场券(
res.code
),这张券可以用来换取更详细的信息(如openId
、sessionKey
等)。 - 程序会把这张券发给后台(调用
getWxCode
),让后台记录你的身份。
- 微信登录就像你在餐厅门口领了一张入场券(
- 请求订阅消息:
- 假设餐厅希望在有优惠活动时通知你,他们会问你:“我们想给您发送优惠信息,您同意吗?”
- 程序弹出一个模态框(
uni.showModal
),询问用户是否同意接收消息。 - 如果用户点击“同意”,程序会调用微信的
requestSubscribeMessage
接口,让用户订阅指定的消息模板(tmplIds
)。 - 如果用户点击“拒绝”,程序不会强制订阅,但可能会记录用户的决定。
- 微信登录: