校友录小程序开发笔记三十:用户认证与审核方案

整体说明

  1. 小程序校友数据基母校开发。由于历史数据繁多,数据库中难免存在疏漏。若无法成功认证身份,请您提交人工审核后耐心等待,或联系校友会由管理员手动审核。

     

  2. 校友数据库目前只收录建院以来全日制本科生、研究生数据,暂不支持教职工、附中、继续教育学院等部门进行认证。未收录部分已纳入系统后期开发计划,敬请期待。

     

  3. 目前在校学生可以正常认证登录,校友类型显示为“在校生”,在校生将在毕业后由校友会统一转换为校友身份。

     

  4. 海外手机号、非大陆学籍校友可能会出现身份认证不成功的情况,请电话联系校友会,由管理员手动认证。

     

  5. 所有校友数据信息将按照法律规定严格保密,不提供给任何第三方,也不用于任何商业目的。

 

  

注册与认证模块

 

进入小程序后,依次点击“我的”-“点击登录账号”(蓝色线框处)进入校友身份认证环节

 

 

认证界面如下图所示,已在完成注册认证的校友,请直接点击图标即可一键完成认证注册步骤

 

 

 

 

 

若不方便进行实名信息认证,可点击下方人工认证,选择对应校友类型填写验证信息。

 

 

 

 相关表

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);
	}

  

  

posted @ 2021-10-01 09:05  CC同学呀  阅读(278)  评论(0编辑  收藏  举报