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 ba474e9..7a387b6 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 0000000..b116d34
--- /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 f9717db..62c414c 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 9a1a056..eb7384b 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 128014d..b5e12ab 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 0000000..cfa6b77
--- /dev/null
+++ b/pages/test/test.vue
@@ -0,0 +1,27 @@
+
+
+ test
+
+
+
+
+
+
diff --git a/uniCloud-aliyun/database/uni-id-users.schema.json b/uniCloud-aliyun/database/uni-id-users.schema.json
index cec2f1a..62f1488 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 c62cf3b..dc8ec95 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 8244191..eebaf29 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 520d4be..5ecbc74 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 6630381..83fbc05 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 0000000..f52b241
--- /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 0000000..7e3037f
--- /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 0000000..965bf27
--- /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 0000000..f0ec7f1
--- /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