挑战30天,开发一个消防答题小程序。教你如何处理小程序用户注册

​ 

挑战30天,开发一个消防答题小程序。教你如何处理小程序用户注册_第1张图片


编辑

[吃瓜群众]啦啦啦~,几天不见我又来了。今天更新第二期,这几天在处理用户注册和题库收集。

知识点:注册逻辑、登录缓存

上一期咱们讲了,如何搭一个基本的小程序框架,涉及开源组件(colorUI、Vant),新手和初中级的前端,十分推荐该两款开源组件,能够帮你节省大量的时间。

​[兔子]上期链接直达:挑战30天,开发一个消防知识答题小程序,第一天

好~,咱们开始吧

1、用户注册登录

90%的用户交互程序,都少不了用户注册这个环节。想要让你的程序能够识别你的身份,那么必须要把用户信息存储在云端,是因为Http协议本身是无状态的,每次重新链接请求,都会忘记你是谁,接下来怎么处理呢?

上期咱们通过“用户填写”的开放能力,用于完善用户头像和昵称,接下来需要把用户的头像和昵称存储到数据库中

打开云开发后台

创建一个“users”的集合,权限(所有用户可读,仅创建者读写)

挑战30天,开发一个消防答题小程序。教你如何处理小程序用户注册_第2张图片


编辑

创建“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),它免费,能够拦截大部分违规字眼。想做一个内容合规的小程序,强烈建议您使用它,非常有必要!

挑战30天,开发一个消防答题小程序。教你如何处理小程序用户注册_第3张图片


编辑

违规检测

代码

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 接口将被收回 小程序不可以直接获取头像永久链接,咱们只好通过“填写能力”获取临时头像,然后把临时头像上传到云存储,生成永久连接

挑战30天,开发一个消防答题小程序。教你如何处理小程序用户注册_第4张图片


编辑

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:新老用户处理逻辑。用户场景:新用户第一次登录,存储信息到数据库,老用户登录,更新数据库的登录时间。然后本地缓存登录凭证,每次请求携带登录凭证即可

挑战30天,开发一个消防答题小程序。教你如何处理小程序用户注册_第5张图片


编辑

流程图

代码

//查询用户是否注册
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
};

}

​[奸笑]三个流程大概就是这样,用户注册流程看起来是不是很简单啦~,

主要归功于云开发天然无鉴权能力帮我们省去了很多时间,也方便了很多无后台基础的同学也能开发自己的小程序,省去了购置服务器,域名备案,后台语言以及运维的烦恼

挑战30天,开发一个消防答题小程序。教你如何处理小程序用户注册_第6张图片


编辑

最终来个数据库特写[无辜笑],用户的头像、昵称、等相关资料是不是存储进去了?

挑战30天,开发一个消防答题小程序。教你如何处理小程序用户注册_第7张图片


编辑

用户资料

挑战30天,开发一个消防答题小程序。教你如何处理小程序用户注册_第8张图片


编辑

缓存

END~,今天用户注册登录部分大概就是这样了,如果哪里还有遗漏或者不明白的,可以在下方留言,我会一一解答

下期预告:题库设计和自动组题

挑战30天,开发一个消防答题小程序。教你如何处理小程序用户注册_第9张图片


编辑

你可能感兴趣的:(前端小程序小程序云开发)