校友录小程序开发笔记三十:用户认证与审核方案
整体说明
-
小程序校友数据基母校开发。由于历史数据繁多,数据库中难免存在疏漏。若无法成功认证身份,请您提交人工审核后耐心等待,或联系校友会由管理员手动审核。
-
校友数据库目前只收录建院以来全日制本科生、研究生数据,暂不支持教职工、附中、继续教育学院等部门进行认证。未收录部分已纳入系统后期开发计划,敬请期待。
-
目前在校学生可以正常认证登录,校友类型显示为“在校生”,在校生将在毕业后由校友会统一转换为校友身份。
-
海外手机号、非大陆学籍校友可能会出现身份认证不成功的情况,请电话联系校友会,由管理员手动认证。
-
所有校友数据信息将按照法律规定严格保密,不提供给任何第三方,也不用于任何商业目的。
注册与认证模块
进入小程序后,依次点击“我的”-“点击登录账号”(蓝色线框处)进入校友身份认证环节
认证界面如下图所示,已在完成注册认证的校友,请直接点击图标即可一键完成认证注册步骤
若不方便进行实名信息认证,可点击下方人工认证,选择对应校友类型填写验证信息。
相关表
UserModel.DB_STRUCTURE = { USER_ID: 'string|true', USER_NAME: 'string|true|comment=用户姓名', USER_PIC: 'string|true|comment=用户头像', USER_PIC_CLOUD_ID: 'string|false|comment=用户头像云存储地址', USER_PHONE_CHECKED: 'string|true|comment=已校验的手机号码', USER_MINI_QRCODE: 'object|false|comment=小程序码地址{url,cloudId}', USER_MINI_OPENID: 'string|true|comment=小程序openid', USER_UNIONID: 'string|false|comment=微信开放平台unionid', USER_WX_OPENID: 'string|false|comment=公众号openid', USER_IS_SUBSCRIBE: 'int|true|default=0|comment=公众号是否关注 0/1', USER_SUBSCRIBE_TIME: 'int|true|default=0|comment=公众号关注时间', USER_IS_MASK: 'int|true|default=0|comment=是否马甲 0/1', USER_STATUS: 'int|true|default=1|comment=状态 0=待审核,1=正常,8=VIP(###1-8为正常区间),9=禁用, 10=已删除', USER_INVITE_ID: 'string|false|comment=邀请码', USER_TYPE: 'int|true|default=0|comment=用户类型 0=店主', USER_CHECK_PIC: 'array|false|default=[]|comment=审核图片 对象数组[{cloudId,url}]', USER_SEX: 'int|true|default=1|comment=性别 1=男,2=女', USER_MOBILE: 'string|false|comment=联系电话', USER_WECHAT: 'string|false|comment=微信', USER_COMPANY: 'string|false|comment=当前单位', USER_CITY: 'string|false|comment=当前城市', USER_DESC: 'string|false|comment=自我介绍', USER_RESOURCE: 'string|false|comment=可提供资源', USER_NEED: 'string|false|comment=需求', USER_SUPP: 'string|false|comment=注册补充说明', USER_ALL_MONEY: 'int|true|default=0|comment=用户总金币', USER_NOW_MONEY: 'int|true|default=0|comment=已使用金币', USER_FAV_CNT: 'int|true|default=0|comment=被收藏人数', USER_INVITE_CNT: 'int|true|default=0|comment=邀请人数', USER_WX_GENDER: 'int|true|default=0|comment=微信性别 0=未定义,1=男,2=女', USER_WX_AVATAR_URL: 'string|false|comment=微信头像链接', USER_WX_NICKNAME: 'string|false|comment=微信昵称', USER_WX_LANGUAGE: 'string|false|comment=微信语言', USER_WX_CITY: 'string|false|comment=微信城市', USER_WX_PROVINCE: 'string|false|comment=微信省份', USER_WX_COUNTRY: 'string|false|comment=微信国家', USER_WX_UPDATE_TIME: 'int|false|comment=微信信息更新时间', USER_LOGIN_CNT: 'int|true|default=0|comment=登陆次数', USER_LOGIN_TIME: 'int|false|comment=最近登录时间', USER_ADD_TIME: 'int|true', USER_ADD_IP: 'string|false', USER_EDIT_TIME: 'int|true', USER_EDIT_IP: 'string|false', }
相关代码
async register(userId, { phone, formData, inviteData, wechatData }) { // ### 判断openid唯一性 let whereCnt = { USER_MINI_OPENID: userId } let cnt = await UserModel.count(whereCnt); if (cnt) { // 已经存在 return await this.login(userId); } let wherePhone = { USER_PHONE_CHECKED: phone } let cntPhone = await UserModel.count(wherePhone); if (cntPhone) this.AppError('该手机号已经注册,请更换手机号码'); // 判断邀请信息 let inviteId = ''; if (inviteData && inviteData.code) { let where = { USER_ID: inviteData.code, USER_STATUS: UserModel.STATUS.COMM } let parentUser = await UserModel.getOne(where, 'USER_MINI_OPENID'); if (parentUser) inviteId = parentUser.USER_MINI_OPENID; } // 取得系统配置 let setup = await SetupModel.getOne({}, 'SETUP_REG_CHECK,SETUP_TITLE'); if (!setup) this.AppError('系统故障'); // 表单值 let data = {}; // 设定值 data.USER_PHONE_CHECKED = phone; // 已校验的手机号码 data.USER_PIC = wechatData.avatarUrl; //默认头像 if (wechatData.unionId) data.USER_UNIONID = wechatData.unionId; data.USER_MINI_OPENID = userId; data.USER_INVITE_ID = inviteId; // 是否审核 data.USER_STATUS = (setup.SETUP_REG_CHECK == 1) ? UserModel.STATUS.UNUSE : UserModel.STATUS.COMM; // 保存用户数据 this.fmtUserFormData(data, formData); // 审核补充说明 data.USER_SUPP = formData.supp; // 更新时间 data.USER_LOGIN_TIME = this._timestamp; // 微信值 data.USER_WX_GENDER = wechatData.gender; data.USER_WX_AVATAR_URL = wechatData.avatarUrl; data.USER_WX_NICKNAME = wechatData.nickName; data.USER_WX_LANGUAGE = wechatData.language; data.USER_WX_CITY = wechatData.city; data.USER_WX_PROVINCE = wechatData.province; data.USER_WX_COUNTRY = wechatData.country; data.USER_WX_UPDATE_TIME = this._timestamp; await UserModel.insert(data); // 异步生成小程序码 this.genMiniQr(userId); // 异步统计邀请 if (inviteId) this.statMoney(inviteId); // 判断是否要等待审核 if (setup.SETUP_REG_CHECK == 1) { let res = { code: 'CODE_WAITCHECK', userId } return res; } else { // 异步消息提醒 let msgService = new MsgService(); msgService.sendRegOkMsg(userId); } return await this.login(userId); }