Преглед на файлове

手机号授权登录去除隐私政策;头像、昵称、姓名、公益口号等增加安全校验

htc преди 1 ден
родител
ревизия
604c6b2c79
променени са 5 файла, в които са добавени 181 реда и са изтрити 18 реда
  1. 101 1
      common/api/index.js
  2. 5 5
      components/pages/loginRegister/index.vue
  3. 25 4
      pagesHome/applyMemberVindicate.vue
  4. 25 4
      pagesMy/familyMemberVindicate.vue
  5. 25 4
      pagesMy/information.vue

+ 101 - 1
common/api/index.js

@@ -79,6 +79,105 @@ function put(url, data, isloading=true) {
 
 
 function del(url, data, isloading=true) {
 function del(url, data, isloading=true) {
 	return $http(url, 'DELETE', data, true, isloading)
 	return $http(url, 'DELETE', data, true, isloading)
+}
+
+//检测文本和图像
+import { BaseApi } from './baseApi.js';
+const labelCfg = {
+	10001:'含有广告内容',
+	20001:'含有时政内容',
+	20002:'含有色情内容',
+	20003:'含有辱骂内容',
+	20006:'含有违法犯罪内容',
+	20008:'含有欺诈内容',
+	20012:'含有低俗内容',
+	20013:'含有版权内容',
+	21000:'含有其他违规内容'
+}
+async function detectionContent(content,type=1){
+	if(type==1){
+		if(!uni.getStorageSync('userInfo')){
+			return uni.showToast({
+				title:'请先进行登录',
+				icon:'none',
+				duration:1500
+			})
+		}
+		return new Promise((resolve,reject)=>{
+			wx.request({
+				method: 'POST',
+				url:`${BaseApi}/wx/secCheckMsg`,
+				dataType:'json',
+				data:{
+					content:encodeURIComponent(content),
+					openId:JSON.parse(uni.getStorageSync('userInfo')).openId
+				},
+				success:res=>{
+					let result = {};
+					if(res.data.code===0){
+						let errcode = res.data.data.errcode;
+						result.code = errcode;
+						
+						if(errcode===0){
+							let resu = res.data.data.result;
+							if(resu.label===100){
+								result.code = 0;
+								result.msg = '系统繁忙,请稍后再试';
+							}else{
+								result.code = resu.label;
+								result.msg = labelCfg[resu.label]||'含有其他违规内容';
+							}
+						}else{
+							if(errcode==-1) result.msg = '系统繁忙,请稍后再试';
+							else if(errcode==87014) result.msg = '内容包含敏感违规信息';
+							else if(errcode==40003) result.msg = 'openid无效,请重新登录';
+							else result.msg = '系统错误';
+						}
+					}
+					return resolve(result)
+				},
+				fail: err => {
+					return reject(err)
+				}
+			})
+		})
+	}else if(type==2){
+		return new Promise((resolve,reject)=>{
+			wx.uploadFile({
+				method:'POST',
+				url:`${BaseApi}/wx/secCheckImg`,
+				filePath: content,
+				name: 'file',
+				header: {
+					'Content-Type': 'application/octet-stream'
+				},
+				formData:{
+					media:content
+				},
+				success: res => {
+					let data = JSON.parse(res.data);
+					let result = {code:999,msg:'数据错误'};
+					if(data&&data.code===0){
+						let resu = JSON.parse(data.data);
+						if(!resu) return;
+						result.code = resu.errcode;
+						if(resu.errcode==87014) result.msg = '图片含有敏感违规信息';
+						else if(resu.errcode==40001) result.msg = 'token无效';
+						else if(resu.errcode==40003) result.msg = 'openid无效';
+						else if(resu.errcode==61010) result.msg = '用户访问记录超时';
+						else{
+							result.code = 0;
+							result.msg = '内容正常';
+						}
+					}
+					return resolve(result)
+				},
+				fail: err => {
+					return reject(err)
+				}
+			});
+		})
+	} 
 }
 }
 
 
 export default {
 export default {
@@ -86,5 +185,6 @@ export default {
 	get,
 	get,
 	post,
 	post,
 	put,
 	put,
-	del
+	del,
+	detectionContent
 }
 }

+ 5 - 5
components/pages/loginRegister/index.vue

@@ -78,11 +78,11 @@
 				<image class="lr-box-top-right" src="https://oss.familydaf.cn/sxsnfile/20251218/ec7dbd753ab044e18abc0eedf3540fad.png" @click="close"></image>
 				<image class="lr-box-top-right" src="https://oss.familydaf.cn/sxsnfile/20251218/ec7dbd753ab044e18abc0eedf3540fad.png" @click="close"></image>
 			</view>
 			</view>
 			<view class="lr-box-memo">公益献爱心 真情暖人心!</view>
 			<view class="lr-box-memo">公益献爱心 真情暖人心!</view>
-			<view class="lr-box-agree adfac">
+			<!-- <view class="lr-box-agree adfac">
 				<image v-if="agree" src="https://oss.familydaf.cn/sxsnfile/20251218/c11b9a1b56f34e1189621f4270f0349a.png" @click="changeAgree"></image>
 				<image v-if="agree" src="https://oss.familydaf.cn/sxsnfile/20251218/c11b9a1b56f34e1189621f4270f0349a.png" @click="changeAgree"></image>
 				<image v-else src="https://oss.familydaf.cn/sxsnfile/20251218/2a2f7bdefb474a3e93faa00aef6d0e1f.png" @click="changeAgree"></image>
 				<image v-else src="https://oss.familydaf.cn/sxsnfile/20251218/2a2f7bdefb474a3e93faa00aef6d0e1f.png" @click="changeAgree"></image>
 				<view class="text">我已阅读并同意<span>《善行少年小程序隐私政策》</span>及<span>《善行少年服务协议》</span></view>
 				<view class="text">我已阅读并同意<span>《善行少年小程序隐私政策》</span>及<span>《善行少年服务协议》</span></view>
-			</view>
+			</view> -->
 			<view class="lr-box-login">
 			<view class="lr-box-login">
 				<button class="phone-login" open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumberLogin" privacy-desc="用于获取您的手机号码,方便您进行登录。">手机号登录</button>
 				<button class="phone-login" open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumberLogin" privacy-desc="用于获取您的手机号码,方便您进行登录。">手机号登录</button>
 			</view>
 			</view>
@@ -154,7 +154,7 @@
 	}
 	}
 	
 	
 	const toPhoneLogin = code => {
 	const toPhoneLogin = code => {
-		if(!agree.value) return proxy.$showToast('请勾选隐私政策和服务协议')
+		// if(!agree.value) return proxy.$showToast('请勾选隐私政策和服务协议')
 		wx.login({
 		wx.login({
 			success(res){
 			success(res){
 				userStore.login({code:res.code,phoneCode:code});
 				userStore.login({code:res.code,phoneCode:code});
@@ -181,7 +181,7 @@
 			padding: 58rpx 30rpx 68rpx;
 			padding: 58rpx 30rpx 68rpx;
 			position: relative;
 			position: relative;
 			&.login{
 			&.login{
-				padding: 32rpx 40rpx 88rpx;
+				padding: 32rpx 40rpx 128rpx;
 			}
 			}
 			&-topbg{
 			&-topbg{
 				width: 100%;
 				width: 100%;
@@ -328,7 +328,7 @@
 				}
 				}
 			}
 			}
 			&-login{
 			&-login{
-				margin-top: 122rpx;
+				margin-top: 82rpx;
 				.phone-login{
 				.phone-login{
 					width: 100%;
 					width: 100%;
 					height: 90rpx;
 					height: 90rpx;

+ 25 - 4
pagesHome/applyMemberVindicate.vue

@@ -110,13 +110,18 @@
 		memberInfo.value[key] = value;
 		memberInfo.value[key] = value;
 	}
 	}
 	
 	
-	const handleSave = () => {
+	const handleSave = async () => {
 		if(!memberInfo.value.avatarPath) return proxy.$showToast('请上传头像')
 		if(!memberInfo.value.avatarPath) return proxy.$showToast('请上传头像')
 		if(memberInfo.value.welfareName&&memberInfo.value.welfareName.length<3) return proxy.$showToast('个人公益名称至少三个字')
 		if(memberInfo.value.welfareName&&memberInfo.value.welfareName.length<3) return proxy.$showToast('个人公益名称至少三个字')
 		if(!memberInfo.value.name) return proxy.$showToast('请输入姓名')
 		if(!memberInfo.value.name) return proxy.$showToast('请输入姓名')
 		if(!proxy.$reg.idCard(memberInfo.value.idCard)) return proxy.$showToast('请输入正确的身份证号')
 		if(!proxy.$reg.idCard(memberInfo.value.idCard)) return proxy.$showToast('请输入正确的身份证号')
 		if(!memberInfo.value.currentSchool&&memberInfo.value.personnelType==2) return proxy.$showToast('请输入就读学校')
 		if(!memberInfo.value.currentSchool&&memberInfo.value.personnelType==2) return proxy.$showToast('请输入就读学校')
 		memberInfo.value.gender = memberInfo.value.gender??1;
 		memberInfo.value.gender = memberInfo.value.gender??1;
+		
+		const checkMsgs = ['welfareName','welfareSlogan','name'].map(k=>checkMsg(k));
+		const tipRes = (await Promise.all(checkMsgs)).filter(item=>item!=='ok');
+		if(tipRes&&tipRes.length) return proxy.$showModal(tipRes.join('、'))
+		
 		if(!memberInfo.value.userId) memberInfo.value.userId = JSON.parse(uni.getStorageSync('userInfo')).id;
 		if(!memberInfo.value.userId) memberInfo.value.userId = JSON.parse(uni.getStorageSync('userInfo')).id;
 		proxy.$api[memberInfo.value.id?'put':'post']('/core/family/member',memberInfo.value).then(({data:res})=>{
 		proxy.$api[memberInfo.value.id?'put':'post']('/core/family/member',memberInfo.value).then(({data:res})=>{
 			if(res.code!==0) return proxy.$showToast(res.msg)
 			if(res.code!==0) return proxy.$showToast(res.msg)
@@ -127,6 +132,19 @@
 		})
 		})
 	}
 	}
 	
 	
+	const checkMsg = async msg => {
+		const msgAlert = {
+			welfareName:'家庭公益名称',
+			welfareSlogan:'家庭公益口号',
+			name:'姓名'
+		}
+		return new Promise((resolve,reject)=>{
+			proxy.$api.detectionContent(memberInfo.value[msg]).then(res=>{
+				resolve(res.code!==0?(`${msgAlert[msg]}:`+res.msg):'ok')
+			})
+		})
+	}
+	
 	const getMemberInfo = (id) => {
 	const getMemberInfo = (id) => {
 		proxy.$api.get(`/core/family/member/${id}`).then(({data:res})=>{
 		proxy.$api.get(`/core/family/member/${id}`).then(({data:res})=>{
 			if(res.code!==0) return proxy.$showToast(res.msg)
 			if(res.code!==0) return proxy.$showToast(res.msg)
@@ -154,9 +172,12 @@
 		success: (res) => {
 		success: (res) => {
 		  const tempFilePaths = res.tempFilePaths;
 		  const tempFilePaths = res.tempFilePaths;
 		  if (tempFilePaths && tempFilePaths.length > 0) {
 		  if (tempFilePaths && tempFilePaths.length > 0) {
-			qicShow.value = true;
-			nextTick(()=>{
-				proxy.$refs.qicRef.initImage(tempFilePaths[0],true)
+			proxy.$api.detectionContent(tempFilePaths[0],2).then(res=>{
+				if(res.code!==0) return proxy.$showToast(res.msg)
+				qicShow.value = true;
+				nextTick(()=>{
+					proxy.$refs.qicRef.initImage(tempFilePaths[0],true)
+				})
 			})
 			})
 		  }
 		  }
 		},
 		},

+ 25 - 4
pagesMy/familyMemberVindicate.vue

@@ -111,13 +111,18 @@
 		memberInfo.value[key] = value;
 		memberInfo.value[key] = value;
 	}
 	}
 	
 	
-	const handleSave = () => {
+	const handleSave = async () => {
 		if(!memberInfo.value.avatarPath) return proxy.$showToast('请上传头像')
 		if(!memberInfo.value.avatarPath) return proxy.$showToast('请上传头像')
 		if(memberInfo.value.welfareName&&memberInfo.value.welfareName.length<3) return proxy.$showToast('个人公益名称至少三个字')
 		if(memberInfo.value.welfareName&&memberInfo.value.welfareName.length<3) return proxy.$showToast('个人公益名称至少三个字')
 		if(!memberInfo.value.name) return proxy.$showToast('请输入姓名')
 		if(!memberInfo.value.name) return proxy.$showToast('请输入姓名')
 		if(!proxy.$reg.idCard(memberInfo.value.idCard)) return proxy.$showToast('请输入正确的身份证号')
 		if(!proxy.$reg.idCard(memberInfo.value.idCard)) return proxy.$showToast('请输入正确的身份证号')
 		if(!memberInfo.value.currentSchool&&memberInfo.value.personnelType==2) return proxy.$showToast('请输入就读学校')
 		if(!memberInfo.value.currentSchool&&memberInfo.value.personnelType==2) return proxy.$showToast('请输入就读学校')
 		memberInfo.value.gender = memberInfo.value.gender??1;
 		memberInfo.value.gender = memberInfo.value.gender??1;
+		
+		const checkMsgs = ['welfareName','welfareSlogan','name'].map(k=>checkMsg(k));
+		const tipRes = (await Promise.all(checkMsgs)).filter(item=>item!=='ok');
+		if(tipRes&&tipRes.length) return proxy.$showModal(tipRes.join('、'))
+		
 		if(!memberInfo.value.userId) memberInfo.value.userId = JSON.parse(uni.getStorageSync('userInfo')).id;
 		if(!memberInfo.value.userId) memberInfo.value.userId = JSON.parse(uni.getStorageSync('userInfo')).id;
 		proxy.$api[memberInfo.value.id?'put':'post']('/core/family/member',memberInfo.value).then(({data:res})=>{
 		proxy.$api[memberInfo.value.id?'put':'post']('/core/family/member',memberInfo.value).then(({data:res})=>{
 			if(res.code!==0) return proxy.$showToast(res.msg)
 			if(res.code!==0) return proxy.$showToast(res.msg)
@@ -136,6 +141,19 @@
 		})
 		})
 	}
 	}
 	
 	
+	const checkMsg = async msg => {
+		const msgAlert = {
+			welfareName:'家庭公益名称',
+			welfareSlogan:'家庭公益口号',
+			name:'姓名'
+		}
+		return new Promise((resolve,reject)=>{
+			proxy.$api.detectionContent(memberInfo.value[msg]).then(res=>{
+				resolve(res.code!==0?(`${msgAlert[msg]}:`+res.msg):'ok')
+			})
+		})
+	}
+	
 	const getMemberInfo = (id) => {
 	const getMemberInfo = (id) => {
 		proxy.$api.get(`/core/family/member/${id}`).then(({data:res})=>{
 		proxy.$api.get(`/core/family/member/${id}`).then(({data:res})=>{
 			if(res.code!==0) return proxy.$showToast(res.msg)
 			if(res.code!==0) return proxy.$showToast(res.msg)
@@ -165,9 +183,12 @@
 		success: (res) => {
 		success: (res) => {
 		  const tempFilePaths = res.tempFilePaths;
 		  const tempFilePaths = res.tempFilePaths;
 		  if (tempFilePaths && tempFilePaths.length > 0) {
 		  if (tempFilePaths && tempFilePaths.length > 0) {
-			qicShow.value = true;
-			nextTick(()=>{
-				proxy.$refs.qicRef.initImage(tempFilePaths[0],true)
+			proxy.$api.detectionContent(tempFilePaths[0],2).then(res=>{
+				if(res.code!==0) return proxy.$showToast(res.msg)
+				qicShow.value = true;
+				nextTick(()=>{
+					proxy.$refs.qicRef.initImage(tempFilePaths[0],true)
+				})
 			})
 			})
 		  }
 		  }
 		},
 		},

+ 25 - 4
pagesMy/information.vue

@@ -78,7 +78,7 @@
 	})
 	})
 	const qicShow = ref(false)
 	const qicShow = ref(false)
 	
 	
-	const save = () => {
+	const save = async () => {
 		// if(!userInfo.value?.avatarPath) return proxy.$showToast('请上传用户头像')
 		// if(!userInfo.value?.avatarPath) return proxy.$showToast('请上传用户头像')
 		// if(!userInfo.value?.realName) return proxy.$showToast('请输入用户名')
 		// if(!userInfo.value?.realName) return proxy.$showToast('请输入用户名')
 		// if(!proxy.$reg.mobile(userInfo.value.phone)) return proxy.$showToast('请输入正确的手机号')
 		// if(!proxy.$reg.mobile(userInfo.value.phone)) return proxy.$showToast('请输入正确的手机号')
@@ -86,6 +86,10 @@
 		// if(!userInfo.value?.welfareSlogan) return proxy.$showToast('请输入家庭公益口号')
 		// if(!userInfo.value?.welfareSlogan) return proxy.$showToast('请输入家庭公益口号')
 		if(userInfo.value.idCard&&!proxy.$reg.idCard(userInfo.value.idCard)) return proxy.$showToast('请输入正确的身份证号')
 		if(userInfo.value.idCard&&!proxy.$reg.idCard(userInfo.value.idCard)) return proxy.$showToast('请输入正确的身份证号')
 		
 		
+		const checkMsgs = ['nickName','realName','welfareName','welfareSlogan'].map(k=>checkMsg(k));
+		const tipRes = (await Promise.all(checkMsgs)).filter(item=>item!=='ok');
+		if(tipRes&&tipRes.length) return proxy.$showModal(tipRes.join('、'))
+		
 		userInfo.value.id = uni.getStorageSync('userInfo')&&JSON.parse(uni.getStorageSync('userInfo')).id;
 		userInfo.value.id = uni.getStorageSync('userInfo')&&JSON.parse(uni.getStorageSync('userInfo')).id;
 		proxy.$api.put('/wx/update',userInfo.value).then(({data:res})=>{
 		proxy.$api.put('/wx/update',userInfo.value).then(({data:res})=>{
 			if(res.code!==0) return proxy.$showToast(res.msg)
 			if(res.code!==0) return proxy.$showToast(res.msg)
@@ -98,6 +102,20 @@
 		})
 		})
 	}
 	}
 	
 	
+	const checkMsg = async msg => {
+		const msgAlert = {
+			nickName:'昵称',
+			realName:'姓名',
+			welfareName:'家庭公益名称',
+			welfareSlogan:'家庭公益口号'
+		}
+		return new Promise((resolve,reject)=>{
+			proxy.$api.detectionContent(userInfo.value[msg]).then(res=>{
+				resolve(res.code!==0?(`${msgAlert[msg]}:`+res.msg):'ok')
+			})
+		})
+	}
+	
 	const changeAvatar = () => {
 	const changeAvatar = () => {
 		uni.showActionSheet({
 		uni.showActionSheet({
 			itemList: ['从手机相册选择'],
 			itemList: ['从手机相册选择'],
@@ -118,9 +136,12 @@
 		success: (res) => {
 		success: (res) => {
 		  const tempFilePaths = res.tempFilePaths;
 		  const tempFilePaths = res.tempFilePaths;
 		  if (tempFilePaths && tempFilePaths.length > 0) {
 		  if (tempFilePaths && tempFilePaths.length > 0) {
-			qicShow.value = true;
-			nextTick(()=>{
-				proxy.$refs.qicRef.initImage(tempFilePaths[0],true)
+			proxy.$api.detectionContent(tempFilePaths[0],2).then(res=>{
+				if(res.code!==0) return proxy.$showToast(res.msg)
+				qicShow.value = true;
+				nextTick(()=>{
+					proxy.$refs.qicRef.initImage(tempFilePaths[0],true)
+				})
 			})
 			})
 		  }
 		  }
 		},
 		},