关于前端:挑战30天开发一个消防答题小程序教你如何处理小程序用户注册

4次阅读

共计 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~,明天用户注册登录局部大略就是这样了,如果哪里还有脱漏或者不明确的,能够在下方留言,我会一一解答

下期预报:题库设计和主动组题

编辑

正文完
 0