From d7189d4683af7da1a994df300696c2de9c832854 Mon Sep 17 00:00:00 2001 From: linju <8432241+linjuDcloud@user.noreply.gitee.com> Date: Mon, 12 Apr 2021 20:20:37 +0800 Subject: [PATCH] 123 --- common/appInit.js | 2 +- js_sdk/request.js | 36 ++++++++ main.js | 3 + pages.json | 43 +++++----- pages/list/list.vue | 2 +- pages/test/test.vue | 27 ++++++ .../database/uni-id-users.schema.json | 2 +- .../common/uni-id/package-lock.json | 33 ++++++-- .../uni-quick-login/uni-quick-login.vue | 59 +++++-------- .../cloudfunctions/user-center/index.js | 8 +- .../user-center/package-lock.json | 26 +----- .../uniCloud/cloudfunctions/user/index.js | 82 +++++++++++++++++++ .../cloudfunctions/user/package-lock.json | 58 +++++++++++++ .../uniCloud/cloudfunctions/user/package.json | 16 ++++ .../cloudfunctions/user/user.param.json | 8 ++ 15 files changed, 308 insertions(+), 97 deletions(-) create mode 100644 js_sdk/request.js create mode 100644 pages/test/test.vue create mode 100644 uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/index.js create mode 100644 uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/package-lock.json create mode 100644 uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/package.json create mode 100644 uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/user.param.json diff --git a/common/appInit.js b/common/appInit.js index ba474e96..7a387b64 100644 --- a/common/appInit.js +++ b/common/appInit.js @@ -5,7 +5,7 @@ export default function (){ initAppVersion(); // 检查更新 - checkUpdate(); + // checkUpdate(); } /** diff --git a/js_sdk/request.js b/js_sdk/request.js new file mode 100644 index 00000000..b116d348 --- /dev/null +++ b/js_sdk/request.js @@ -0,0 +1,36 @@ +/* +1.优雅访问指定路由地址 +2.load自动显示与关闭 +3.统一路由拦截 + 3.1 读取云端接口权限配置,先验证本地token再访问 + 3.2 处理因token过期等问题自动更新本地token,或token无效跳转至登陆页面 +*/ +const debug = true;//开启后,会alert错误信息 +export default function request(name,params,callback,{showLoading=false,loadText='',fail=()=>{}}={}){ + console.log('request'); + showLoading||loadText? uni.showLoading({title:loadText}):''; + + let routers = name.split('/'); + var action = false + if (routers.length>1){ + name = routers[0] + action = routers[1] + } + console.log({name,data: {action,params}}) + return uniCloud.callFunction({name,data: {action,params}, + success(e){ + console.log(e); + if(showLoading || loadText) uni.hideLoading() + const res = e.result + if (res.code === 0 ) { + return callback(res.data, e.result, e) + } + debug? uni.showModal({content: JSON.stringify(e)}) :''; + }, + fail(err){ + console.log(err); + debug? uni.showModal({content: JSON.stringify(err)}) :''; + fail(err) + } + }) +} \ No newline at end of file diff --git a/main.js b/main.js index f9717dbe..62c414c3 100644 --- a/main.js +++ b/main.js @@ -2,7 +2,10 @@ import Vue from 'vue' import App from './App' import store from './store/index.js'; +import request from './js_sdk/request.js'; + Vue.config.productionTip = false +Vue.prototype.request = request App.mpType = 'app' diff --git a/pages.json b/pages.json index 9a1a0563..eb7384b4 100644 --- a/pages.json +++ b/pages.json @@ -180,34 +180,33 @@ } } - ], + ,{ + "path" : "pages/test/test", + "style" : + { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + } + ], "globalStyle": { "navigationBarTextStyle": "black", "navigationBarTitleText": "base-app", "navigationBarBackgroundColor": "#FFFFFF", "backgroundColor": "#F8F8F8" }, - // "condition": { - // "list": [{ - // "path": "uni_modules/uni-login-page/pages/index/index", - // "style": { - // "navigationBarTitleText": "", - // "app-plus": { - // "animationType": "none", - // "popGesture": "none", - // "titleNView": { - // "buttons": [{ - // "text": "帮助", - // "type": "none", - // "fontSize": "16px", - // "width": "60px" - // }] - // } - // } - // } - // }], - // "current": 0 - // }, + "condition": { + "list": [ + { + "path": "uni_modules/uni-login-page/pages/index/index" + }, + { + "path": "pages/test/test" + } + ], + "current":0 + }, "tabBar": { "color": "#7A7E83", "selectedColor": "#007AFF", diff --git a/pages/list/list.vue b/pages/list/list.vue index 128014d9..b5e12ab8 100644 --- a/pages/list/list.vue +++ b/pages/list/list.vue @@ -16,7 +16,7 @@ searchText: '', canSearch:true }; - }, + }, onShow(options) { this.searchText = getApp().globalData.searchText; }, diff --git a/pages/test/test.vue b/pages/test/test.vue new file mode 100644 index 00000000..cfa6b77d --- /dev/null +++ b/pages/test/test.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/uniCloud-aliyun/database/uni-id-users.schema.json b/uniCloud-aliyun/database/uni-id-users.schema.json index cec2f1af..62f14887 100644 --- a/uniCloud-aliyun/database/uni-id-users.schema.json +++ b/uniCloud-aliyun/database/uni-id-users.schema.json @@ -1,7 +1,7 @@ { "bsonType": "object", "permission": { - "read": true, + "read": "'read' in auth.permission", "create": false, "update": "doc._id == auth.uid", "delete": false diff --git a/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package-lock.json b/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package-lock.json index c62cf3be..dc8ec957 100644 --- a/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package-lock.json +++ b/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package-lock.json @@ -1,11 +1,28 @@ { - "name": "uni-id", - "version": "3.0.8", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "uni-config-center": { - "version": "file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center" - } + "name": "uni-id", + "version": "3.0.8", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "3.0.8", + "license": "Apache-2.0", + "dependencies": { + "uni-config-center": "file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center" + } + }, + "../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center": { + "version": "0.0.1", + "license": "Apache-2.0" + }, + "node_modules/uni-config-center": { + "resolved": "../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center", + "link": true } + }, + "dependencies": { + "uni-config-center": { + "version": "file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center" + } + } } diff --git a/uni_modules/uni-quick-login/components/uni-quick-login/uni-quick-login.vue b/uni_modules/uni-quick-login/components/uni-quick-login/uni-quick-login.vue index 8244191c..eebaf294 100644 --- a/uni_modules/uni-quick-login/components/uni-quick-login/uni-quick-login.vue +++ b/uni_modules/uni-quick-login/components/uni-quick-login/uni-quick-login.vue @@ -97,7 +97,7 @@ login(type) { let oauthService = this.oauthServices.find((service) => service.id == type) // #ifdef APP-PLUS - uni.showLoading({mask: true}); + //uni.showLoading({mask: true}); //请勿直接使用前端获取的unionid或openid直接用于登陆,前端的数据都是不可靠的 if(type=='weixin'){ @@ -131,46 +131,25 @@ }) // #endif }, - quickLogin(params,type){ - console.log({params,type}); - uniCloud.callFunction({//联网验证登陆 - "name": "user-center", - "data": { - "action": "login_by_"+type, - params - }, - success:async (e) => { - uni.hideLoading() - console.log(e.result); - // uni.showModal({ - // content: JSON.stringify(e.result), - // showCancel: false - // }); - if(e.result.code === 0){ - uni.setStorageSync('uni_id_uid', e.result.uid) - uni.setStorageSync('uni_id_token', e.result.token) - uni.setStorageSync('uni_id_token_expired', e.result.tokenExpired) - // console.log('66666=',e.result.uid,e.result.token,e.result.tokenExpired); - delete e.result.userInfo.token - this.setUserInfo(e.result.userInfo) - if(type=='univerify'){ - uni.closeAuthView() - } - uni.showToast({ - title: '登陆成功', - icon: 'none' - }); - uni.navigateBack() + quickLogin(params,type){//联网验证登陆 + console.log(params,type); + this.request('user-center/login_by_'+type,params,(data,result)=>{ + console.log(result); + if(result.code === 0){ + uni.setStorageSync('uni_id_uid', result.uid) + uni.setStorageSync('uni_id_token', result.token) + uni.setStorageSync('uni_id_token_expired', result.tokenExpired) + + delete result.userInfo.token + this.setUserInfo(result.userInfo) + if(type=='univerify'){ + uni.closeAuthView() } - }, - fail: (err) => { - console.log(err); - if(err.errCode===30002){ - - } - }, - complete: () => { - uni.hideLoading() + uni.showToast({ + title: '登陆成功', + icon: 'none' + }); + uni.navigateBack() } }) }, diff --git a/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user-center/index.js b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user-center/index.js index 520d4beb..5ecbc743 100644 --- a/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user-center/index.js +++ b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user-center/index.js @@ -1,9 +1,15 @@ 'use strict'; -const uniID = require('uni-id') +let uniID = require('uni-id') const uniCaptcha = require('uni-captcha') const db = uniCloud.database() const dbCmd = db.command exports.main = async (event, context) => { + /** + * UNI_WYQ:这里的uniID换成新的,保证多人访问不会冲突 + */ + uniID = uniID.createInstance({ + context + }) //event为客户端上传的参数 console.log('event : ' + event) let params = event.params || {} diff --git a/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user-center/package-lock.json b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user-center/package-lock.json index 6630381f..83fbc054 100644 --- a/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user-center/package-lock.json +++ b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user-center/package-lock.json @@ -1,25 +1,5 @@ { - "name": "user-center", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "uni-captcha": { - "version": "file:../../../../uni-captcha/uniCloud/cloudfunctions/common/uni-captcha" - }, - "uni-config-center": { - "version": "file:../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center" - }, - "uni-id": { - "version": "file:../../../../uni-id/uniCloud/cloudfunctions/common/uni-id", - "requires": { - "uni-config-center": "file:../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center" - }, - "dependencies": { - "uni-config-center": { - "version": "file:../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center" - } - } - } - } + "name": "user-center", + "version": "1.0.0", + "lockfileVersion": 1 } diff --git a/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/index.js b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/index.js new file mode 100644 index 00000000..f52b2416 --- /dev/null +++ b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/index.js @@ -0,0 +1,82 @@ +'use strict'; +const uniID = require('uni-id') +const uniCaptcha = require('uni-captcha') +const db = uniCloud.database() +const dbCmd = db.command +let params,context,res; +class User { + async quickLogin(){ + let {access_token,openid,type} = params + switch (type){ + case 'weixin': + let userinfo_res = await uniCloud.httpclient.request('https://api.weixin.qq.com/sns/userinfo', + { + method: 'GET', + dataType:"json", + data:{ access_token,openid} + }); + return userinfo_res.data//根据access_token,openid得到userinfo + //检查是否已经注册... + break; + case 'univerify': + return uniID.loginByUniverify({access_token,openid}) + break; + case 'apple': + return await uniID.loginByApple(params) + break; + default: + return {"code":100,"msg":"暂不提供"+type+"登陆的云端接口演示"} + break; + } + } + async sendSmsCode(){ + // 简单限制一下客户端调用频率 + const ipLimit = await db.collection('uni-verify').where({ + ip: context.CLIENTIP, + created_at: dbCmd.gt(Date.now() - 60000) + }).get() + if (ipLimit.data.length > 0) { + return { + code: 429, + msg: '请求过于频繁' + } + } + const templateId = '11753' // 替换为自己申请的模板id + if (!templateId) { + return { + code: 500, + msg: 'sendSmsCode需要传入自己的templateId,参考https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=sendsmscode' + } + } + const randomStr = '00000' + Math.floor(Math.random() * 1000000) + const code = randomStr.substring(randomStr.length - 6) + return await uniID.sendSmsCode({ + mobile: params.mobile, + code, + type: params.type, + templateId + }) + } +} +const userClass = new User(); +exports.main = async (event, ctx) => { + [{params},context] = [event,ctx] + //1.判断需要token的action是否有token + /*let noCheckAction = ['register', 'loginByWeixin', 'checkToken','login', 'logout', 'sendSmsCode','loginBySms', 'inviteLogin', 'loginByUniverify','loginByApple', 'createCaptcha', 'verifyCaptcha','refreshCaptcha'] + if(!noCheckAction.includes(event.action)) { + if (!event.uniIdToken) { + return {"code":403,"msg":"缺少token"} + } + let payload = {} + payload = await uniID.checkToken(event.uniIdToken) + if (payload.code && payload.code > 0) { + return payload + } + params.uid = payload.uid + }*/ + try{ + return await userClass[event.action]()||res; + }catch(err){ + return {"code":404,"msg":err} + } +} \ No newline at end of file diff --git a/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/package-lock.json b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/package-lock.json new file mode 100644 index 00000000..7e3037fa --- /dev/null +++ b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/package-lock.json @@ -0,0 +1,58 @@ +{ + "name": "user", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "uni-captcha": "file:../../../../uni-captcha/uniCloud/cloudfunctions/common/uni-captcha", + "uni-config-center": "file:../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center", + "uni-id": "file:../../../../uni-id/uniCloud/cloudfunctions/common/uni-id" + } + }, + "../../../../uni-captcha/uniCloud/cloudfunctions/common/uni-captcha": { + "version": "0.1.0", + "license": "Apache-2.0" + }, + "../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center": { + "version": "0.0.1", + "license": "Apache-2.0" + }, + "../../../../uni-id/uniCloud/cloudfunctions/common/uni-id": { + "version": "3.0.8", + "license": "Apache-2.0", + "dependencies": { + "uni-config-center": "file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center" + } + }, + "node_modules/uni-captcha": { + "resolved": "../../../../uni-captcha/uniCloud/cloudfunctions/common/uni-captcha", + "link": true + }, + "node_modules/uni-config-center": { + "resolved": "../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center", + "link": true + }, + "node_modules/uni-id": { + "resolved": "../../../../uni-id/uniCloud/cloudfunctions/common/uni-id", + "link": true + } + }, + "dependencies": { + "uni-captcha": { + "version": "file:../../../../uni-captcha/uniCloud/cloudfunctions/common/uni-captcha" + }, + "uni-config-center": { + "version": "file:../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center" + }, + "uni-id": { + "version": "file:../../../../uni-id/uniCloud/cloudfunctions/common/uni-id", + "requires": { + "uni-config-center": "file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center" + } + } + } +} diff --git a/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/package.json b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/package.json new file mode 100644 index 00000000..965bf274 --- /dev/null +++ b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/package.json @@ -0,0 +1,16 @@ +{ + "name": "user", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "uni-captcha": "file:../../../../uni-captcha/uniCloud/cloudfunctions/common/uni-captcha", + "uni-config-center": "file:../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center", + "uni-id": "file:../../../../uni-id/uniCloud/cloudfunctions/common/uni-id" + } +} diff --git a/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/user.param.json b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/user.param.json new file mode 100644 index 00000000..f0ec7f13 --- /dev/null +++ b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user/user.param.json @@ -0,0 +1,8 @@ +// 本文件中的json内容将在云函数【运行】时作为参数传给云函数。 +// 配置教程参考:https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam +{ + "action": "sendSmsCode", + "params": { + "phone":"17769516081" + } +} -- GitLab