共计 2876 个字符,预计需要花费 8 分钟才能阅读完成。
编辑
[吃瓜大众] 啦啦啦~,几天不见我又来了。明天更新第二期,这几天在解决用户注册和题库收集。
知识点:注册逻辑、登录缓存
上一期咱们讲了,如何搭一个根本的小程序框架,波及开源组件(colorUI、Vant),老手和初中级的前端,非常举荐该两款开源组件,可能帮你节俭大量的工夫。
[兔子] 上期链接中转:挑战 30 天,开发一个消防常识答题小程序,第一天
好~,咱们开始吧
1、用户注册登录
90% 的用户交互程序,都少不了用户注册这个环节。想要让你的程序可能辨认你的身份,那么必须要把用户信息存储在云端,是因为 Http 协定自身是无状态的,每次从新链接申请,都会遗记你是谁,接下来怎么解决呢?
上期咱们通过“用户填写”的凋谢能力,用于欠缺用户头像和昵称,接下来须要把用户的头像和昵称存储到数据库中
关上云开发后盾
创立一个“users”的汇合,权限(所有用户可读,仅创建者读写)
编辑
创立“users”汇合
汇合创立好了之后,就开始写代码,把用户信息存储进去
代码
// 保留用户信息
saveInfo: async function () {
var that = this;
// 弹窗
wx.showToast({
title: '保留中',
icon: "loading",
duration: 30000
})
// 先检测用户昵称
const checkResult = await that.checkText();
if (checkResult.result.errcode == 0) {
// 上传用户头像
const uploadResult = await that.upload();
// 头像链接
var fileID = uploadResult.result.fileID;
// 上传胜利
if (fileID) {
// 此处云开发函数注册用户
wx.cloud.callFunction({
name: 'login',
data: {create_time: util.formatTime(new Date()),
avatarUrl: fileID,
nickName: that.data.nickName,
openid: that.data.openid,
}
}).then((res) => {
// 登录胜利跳转首页
that.jump();}).catch((err) => {
// 登录失败
wx.showToast({
icon: 'none',
title: '登录失败' + err
})
});
} else {
wx.showToast({
title: '头像保留失败',
icon: "none",
duration: 1000
})
}
} else {
// 清空用户昵称
that.setData({nickName: ''})
// 不非法
wx.showToast({
title: '昵称不非法,请从新输出',
icon: "none",
duration: 1000
})
}
},
以上代码波及三层业务流程
1:检测用户昵称是否合规(小程序十分有必要接入 msgSecCheck 内容检测 API),它收费,可能拦挡大部分违规字眼。想做一个内容合规的小程序,强烈建议您应用它,十分有必要!
编辑
违规检测
代码
try {
const result = await cloud.openapi.security.msgSecCheck({
openid: event.openid, //openid
scene: 2, //1 材料;2 评论;3 论坛;4 社交日志)version: 2, // 版本 2
content: event.content, // 检测内容
})
// 默认不通过
result['errcode'] = 87014;
//suggest risky(危险)、pass(通过)、review(审查)
if (result['result']['suggest'] == 'pass' || result['result']['suggest'] == 'review') {
// 通过平安检测
result['errcode'] = 0;
} else {
// 违规内容
result['errcode'] = 87014;
}
// 返回状态码
return result;
} catch (err) {
return err;
}
2:头像上传。因为截止到 11.8 日,对于小程序 wx.getUserProfile 接口将被发出 小程序不能够间接获取头像永恒链接,咱们只好通过“填写能力”获取长期头像,而后把长期头像上传到云存储,生成永恒连贯
编辑
avatarUrl 永恒头像连贯
代码
upload: function () {
var that = this;
// 此处上传用户头像
let orderCode = '';
// 6 位随机数 (加在工夫戳前面)
for (var i = 0; i < 24; i++) {orderCode += Math.floor(Math.random() * 10);
}
// 文件名
const cloudPath = 'avatar/' + util.timestampToTimeFramt(new Date().getTime()) + '/' + (new Date().getTime() + orderCode) + '.png';
// 检测文本值
return new Promise((resolve, reject) => {
// 上传图片云函数
wx.cloud.callFunction({
name: "upload",
data: {
cloudPath: cloudPath,
avatarUrl: that.data.avatarUrl,
},
success: function (res) {resolve(res);
},
fail: function (res) {reject(res);
}
});
})
},
3:新老用户解决逻辑。用户场景:新用户第一次登录,存储信息到数据库,老用户登录,更新数据库的登录工夫。而后本地缓存登录凭证,每次申请携带登录凭证即可
编辑
流程图
代码
// 查问用户是否注册
const userResult = await db.collection(‘users’).where({
openid: event.openid,
}).get();
// 取出用户条数
var length = userResult.data.length;
if (length == 0) {
// 新用户须要填写材料, 登录态 false
return {
success: false,
msg: '新用户 (填写材料)'
};
} else {
// 老用户登录态 true
return {
success: true,
msg: '老用户 (间接登录)',
data: userResult.data
};
}
[狞笑] 三个流程大略就是这样,用户注册流程看起来是不是很简略啦~,
次要归功于云开发人造无鉴权能力帮咱们省去了很多工夫,也不便了很多无后盾根底的同学也能开发本人的小程序,省去了购买服务器,域名备案,后盾语言以及运维的懊恼
编辑
最终来个数据库特写 [无辜笑],用户的头像、昵称、等相干材料是不是存储进去了?
编辑
用户材料
编辑
缓存
END~,明天用户注册登录局部大略就是这样了,如果哪里还有脱漏或者不明确的,能够在下方留言,我会一一解答
下期预报:题库设计和主动组题
编辑