diff --git a/common/appInit.js b/common/appInit.js index ba474e96926652ae041d12496e42de629caa2b5f..7a387b64b62cdc8e106f50c0ffa7bf9524718f99 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 0000000000000000000000000000000000000000..b116d348bff5d42423876945a065e66a5ad9d1c2 --- /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 f9717dbe4b112f686b2d11775c84565cd5f70084..62c414c3d2b6dcd35524999f7a46eb36f8268e11 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 cd83996aac72501ae3ef92ec9e580e713d7cb13c..3e7a9ed0c40f9d0c28c082bed15853598b4e9810 100644 --- a/pages.json +++ b/pages.json @@ -191,7 +191,16 @@ } } - ], + ,{ + "path" : "pages/test/test", + "style" : + { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + } + ], "globalStyle": { "navigationBarTextStyle": "black", "navigationBarTitleText": "base-app", @@ -199,10 +208,15 @@ "backgroundColor": "#F8F8F8" }, "condition": { - "list": [{ - "path": "uni_modules/opendb-feedback/pages/opendb-feedback/list" - }], - "current": 0 + "list": [ + { + "path": "uni_modules/uni-login-page/pages/index/index" + }, + { + "path": "pages/test/test" + } + ], + "current":0 }, "tabBar": { "color": "#7A7E83", diff --git a/pages/list/list.vue b/pages/list/list.vue index 128014d986f73a31193f77d74255ddf8d86204d4..b5e12ab80c9b95af67d0f8bec120d7d174f1a2a6 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 0000000000000000000000000000000000000000..cfa6b77d7023ebaf8489f24e64c1bbed24cc26aa --- /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 cec2f1af52c4c2c581e4417eabbb646d0eef03ae..62f14887cc775ee066677d4de728957c0e562559 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 c62cf3beda4f0465443af08ac5df57028a2fedd1..dc8ec957524be78035e54bb52d976325bb5d4bc8 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 8244191cc7edbbe3c8ffaa0e339faf79c0b60594..eebaf2945683d5cd3728278ad707753c9212a53f 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/package-lock.json b/uni_modules/uni-quick-login/uniCloud/cloudfunctions/user-center/package-lock.json index 6630381f378b01c73f31b005fb65621b9e9ac2a1..83fbc05449f816d32acb4c505bf00fd934bf0c14 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 0000000000000000000000000000000000000000..f52b2416b5a418af55ccd4a4ffe9eee4e6637cc8 --- /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 0000000000000000000000000000000000000000..7e3037fa82ddad8ccaa8db9579840018c4cfb720 --- /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 0000000000000000000000000000000000000000..965bf274cb22107b31b692a78c0e33eaee48e095 --- /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 0000000000000000000000000000000000000000..f0ec7f1310f9e40c0fcd8e1ea8297d311e08d999 --- /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" + } +}