From 792fb3c85ae1db336a48b0740b7633186d323f7e Mon Sep 17 00:00:00 2001 From: linju Date: Sat, 8 Oct 2022 23:36:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B3=A8=E5=86=8C=E4=BC=9A?= =?UTF-8?q?=E6=8A=A5TypeErroe=EF=BC=9ACannot=20read=20properties=20of=20un?= =?UTF-8?q?defined=20=EF=BC=88reading=20=E2=80=99showToast=E2=80=98?= =?UTF-8?q?=EF=BC=89=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.json | 2 +- .../common/uni-id-common/index.js | 2 +- .../uni-id-pages/pages/register/register.vue | 5 +---- .../uni-id-pages/static/login/weixin.png | Bin 13348 -> 13060 bytes 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/manifest.json b/manifest.json index c1bda1a..82270bf 100644 --- a/manifest.json +++ b/manifest.json @@ -128,7 +128,7 @@ "uniStatistics" : { "enable" : false }, - "vueVersion" : "3", + "vueVersion" : "2", "h5" : { "unipush" : { "enable" : false diff --git a/uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common/index.js b/uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common/index.js index c51a148..fec9e66 100644 --- a/uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common/index.js +++ b/uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common/index.js @@ -1 +1 @@ -"use strict";var e,t=(e=require("crypto"))&&"object"==typeof e&&"default"in e?e.default:e;const n={TOKEN_EXPIRED:"uni-id-token-expired",CHECK_TOKEN_FAILED:"uni-id-check-token-failed",PARAM_REQUIRED:"uni-id-param-required",ACCOUNT_EXISTS:"uni-id-account-exists",ACCOUNT_NOT_EXISTS:"uni-id-account-not-exists",ACCOUNT_CONFLICT:"uni-id-account-conflict",ACCOUNT_BANNED:"uni-id-account-banned",ACCOUNT_AUDITING:"uni-id-account-auditing",ACCOUNT_AUDIT_FAILED:"uni-id-account-audit-failed",ACCOUNT_CLOSED:"uni-id-account-closed"};function i(e){return!!e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof e.then}function r(e){if(!e)return;const t=e.match(/^(\d+).(\d+).(\d+)/);return t?t.slice(1,4).map(e=>parseInt(e)):void 0}function o(e,t){const n=r(e),i=r(t);return n?i?function(e,t){const n=Math.max(e.length,t.length);for(let i=0;ir)return 1;if(ne)throw new Error("Config error, tokenExpiresThreshold should be less than tokenExpiresIn")}get customToken(){return this.uniId.interceptorMap.get("customToken")}isTokenInDb(e){return o(e,"1.0.10")>=0}async getUserRecord(){if(this.userRecord)return this.userRecord;const e=await C.doc(this.uid).get();if(this.userRecord=e.data[0],!this.userRecord)throw{errCode:n.ACCOUNT_NOT_EXISTS};switch(this.userRecord.status){case void 0:case 0:break;case 1:throw{errCode:n.ACCOUNT_BANNED};case 2:throw{errCode:n.ACCOUNT_AUDITING};case 3:throw{errCode:n.ACCOUNT_AUDIT_FAILED};case 4:throw{errCode:n.ACCOUNT_CLOSED}}if(this.oldTokenPayload){if(this.isTokenInDb(this.oldTokenPayload.uniIdVersion)){if(-1===(this.userRecord.token||[]).indexOf(this.oldToken))throw{errCode:n.CHECK_TOKEN_FAILED}}if(this.userRecord.valid_token_date&&this.userRecord.valid_token_date>1e3*this.oldTokenPayload.iat)throw{errCode:n.TOKEN_EXPIRED}}return this.userRecord}async updateUserRecord(e){await C.doc(this.uid).update(e)}async getUserPermission(){if(this.userPermission)return this.userPermission;const e=(await this.getUserRecord()).role||[];if(0===e.length)return this.userPermission={role:[],permission:[]},this.userPermission;if(e.includes("admin"))return this.userPermission={role:["admin"],permission:[]},this.userPermission;const t=await m.where({role_id:_.in(e)}).get(),n=(i=t.data.reduce((e,t)=>(t.permission&&e.push(...t.permission),e),[]),Array.from(new Set(i)));var i;return this.userPermission={role:e,permission:n},this.userPermission}async _createToken({uid:e,role:t,permission:i}={}){if(!t||!i){const e=await this.getUserPermission();t=e.role,i=e.permission}let r={uid:e,role:t,permission:i};if(this.uniId.interceptorMap.has("customToken")){const n=this.uniId.interceptorMap.get("customToken");if("function"!=typeof n)throw new Error("Invalid custom token file");r=await n({uid:e,role:t,permission:i})}const o=Date.now(),{tokenSecret:s,tokenExpiresIn:c}=this.config,a=g({...r,uniIdVersion:"1.0.13"},s,{expiresIn:c}),u=await this.getUserRecord(),d=(u.token||[]).filter(e=>{try{const t=this._checkToken(e);if(u.valid_token_date&&u.valid_token_date>1e3*t.iat)return!1}catch(e){if(e.errCode===n.TOKEN_EXPIRED)return!1}return!0});return d.push(a),await this.updateUserRecord({last_login_ip:this.clientInfo.clientIP,last_login_date:o,token:d}),{token:a,tokenExpired:o+1e3*c}}async createToken({uid:e,role:t,permission:i}={}){if(!e)throw{errCode:n.PARAM_REQUIRED,errMsgValue:{param:"uid"}};this.uid=e;const{token:r,tokenExpired:o}=await this._createToken({uid:e,role:t,permission:i});return{errCode:0,token:r,tokenExpired:o}}async refreshToken({token:e}={}){if(!e)throw{errCode:n.PARAM_REQUIRED,errMsgValue:{param:"token"}};this.oldToken=e;const t=this._checkToken(e);this.uid=t.uid,this.oldTokenPayload=t;const{uid:i}=t,{role:r,permission:o}=await this.getUserPermission(),{token:s,tokenExpired:c}=await this._createToken({uid:i,role:r,permission:o});return{errCode:0,token:s,tokenExpired:c}}_checkToken(e){const{tokenSecret:t}=this.config;let i;try{i=k(e,t)}catch(e){if("TokenExpiredError"===e.name)throw{errCode:n.TOKEN_EXPIRED};throw{errCode:n.CHECK_TOKEN_FAILED}}return i}async checkToken(e,{autoRefresh:t=!0}={}){if(!e)throw{errCode:n.PARAM_REQUIRED,errMsgValue:{param:"token"}};this.oldToken=e;const i=this._checkToken(e);this.uid=i.uid,this.oldTokenPayload=i;const{tokenExpiresThreshold:r}=this.config,{uid:o,role:s,permission:c}=i,a={role:s,permission:c};if(!s&&!c){const{role:e,permission:t}=await this.getUserPermission();a.role=e,a.permission=t}if(!r||!t){const e={code:0,errCode:0,...i,...a};return delete e.uniIdVersion,e}const u=Date.now();let d={};1e3*i.exp-u<1e3*r&&(d=await this._createToken({uid:o}));const l={code:0,errCode:0,...i,...a,...d};return delete l.uniIdVersion,l}}var E=Object.freeze({__proto__:null,checkToken:async function(e,{autoRefresh:t=!0}={}){return new T({uniId:this}).checkToken(e,{autoRefresh:t})},createToken:async function({uid:e,role:t,permission:n}={}){return new T({uniId:this}).createToken({uid:e,role:t,permission:n})},refreshToken:async function({token:e}={}){return new T({uniId:this}).refreshToken({token:e})}});const w=require("uni-config-center")({pluginId:"uni-id"});class A{constructor({context:e,clientInfo:t,config:n}={}){this._clientInfo=e?function(e){return{appId:e.APPID,platform:e.PLATFORM,locale:e.LOCALE,clientIP:e.CLIENTIP,deviceId:e.DEVICEID}}(e):t,this.config=n||this._getOriginConfig(),this.interceptorMap=new Map,w.hasFile("custom-token.js")&&this.setInterceptor("customToken",require(w.resolve("custom-token.js"))),this._i18n=uniCloud.initI18n({locale:this._clientInfo.locale,fallbackLocale:"zh-Hans",messages:d})}setInterceptor(e,t){this.interceptorMap.set(e,t)}_t(...e){return this._i18n.t(...e)}_parseOriginConfig(e){return Array.isArray(e)?e:e[0]?Object.values(e):e}_getOriginConfig(){if(w.hasFile("config.json")){let e;try{e=w.config()}catch(e){throw new Error("Invalid uni-id config file\n"+e.message)}return this._parseOriginConfig(e)}try{return this._parseOriginConfig(require("uni-id/config.json"))}catch(e){throw new Error("Invalid uni-id config file")}}_getAppConfig(){const e=this._getOriginConfig();return Array.isArray(e)?e.find(e=>e.dcloudAppid===this._clientInfo.appId)||e.find(e=>e.isDefaultConfig):e}_getPlatformConfig(){const e=this._getAppConfig();if(!e)throw new Error(`Config for current app (${this._clientInfo.appId}) was not found, please check your config file or client appId`);let t;switch("app-plus"===this._clientInfo.platform&&(this._clientInfo.platform="app"),"h5"===this._clientInfo.platform&&(this._clientInfo.platform="web"),this._clientInfo.platform){case"web":t="h5";break;case"app":t="app-plus"}const n=[{tokenExpiresIn:7200,tokenExpiresThreshold:1200,passwordErrorLimit:6,passwordErrorRetryTime:3600},e];t&&e[t]&&n.push(e[t]),n.push(e[this._clientInfo.platform]);const i=Object.assign(...n);return["tokenSecret","tokenExpiresIn"].forEach(e=>{if(!i||!i[e])throw new Error(`Config parameter missing, ${e} is required`)}),i}_getConfig(){return this._getPlatformConfig()}}for(const e in E)A.prototype[e]=E[e];function y(e){const t=new A(e);return new Proxy(t,{get(e,t){if(t in e&&0!==t.indexOf("_")){if("function"==typeof e[t])return(n=e[t],function(){let e;try{e=n.apply(this,arguments)}catch(e){if(a(e))return c.call(this,e),e;throw e}return i(e)?e.then(e=>(a(e)&&c.call(this,e),e),e=>{if(a(e))return c.call(this,e),e;throw e}):(a(e)&&c.call(this,e),e)}).bind(e);if("context"!==t&&"config"!==t)return e[t]}var n}})}A.prototype.createInstance=y;const x={createInstance:y};module.exports=x; +"use strict";var e,t=(e=require("crypto"))&&"object"==typeof e&&"default"in e?e.default:e;const n={TOKEN_EXPIRED:"uni-id-token-expired",CHECK_TOKEN_FAILED:"uni-id-check-token-failed",PARAM_REQUIRED:"uni-id-param-required",ACCOUNT_EXISTS:"uni-id-account-exists",ACCOUNT_NOT_EXISTS:"uni-id-account-not-exists",ACCOUNT_CONFLICT:"uni-id-account-conflict",ACCOUNT_BANNED:"uni-id-account-banned",ACCOUNT_AUDITING:"uni-id-account-auditing",ACCOUNT_AUDIT_FAILED:"uni-id-account-audit-failed",ACCOUNT_CLOSED:"uni-id-account-closed"};function i(e){return!!e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof e.then}function r(e){if(!e)return;const t=e.match(/^(\d+).(\d+).(\d+)/);return t?t.slice(1,4).map(e=>parseInt(e)):void 0}function o(e,t){const n=r(e),i=r(t);return n?i?function(e,t){const n=Math.max(e.length,t.length);for(let i=0;ir)return 1;if(ne)throw new Error("Config error, tokenExpiresThreshold should be less than tokenExpiresIn")}get customToken(){return this.uniId.interceptorMap.get("customToken")}isTokenInDb(e){return o(e,"1.0.10")>=0}async getUserRecord(){if(this.userRecord)return this.userRecord;const e=await C.doc(this.uid).get();if(this.userRecord=e.data[0],!this.userRecord)throw{errCode:n.ACCOUNT_NOT_EXISTS};switch(this.userRecord.status){case void 0:case 0:break;case 1:throw{errCode:n.ACCOUNT_BANNED};case 2:throw{errCode:n.ACCOUNT_AUDITING};case 3:throw{errCode:n.ACCOUNT_AUDIT_FAILED};case 4:throw{errCode:n.ACCOUNT_CLOSED}}if(this.oldTokenPayload){if(this.isTokenInDb(this.oldTokenPayload.uniIdVersion)){if(-1===(this.userRecord.token||[]).indexOf(this.oldToken))throw{errCode:n.CHECK_TOKEN_FAILED}}if(this.userRecord.valid_token_date&&this.userRecord.valid_token_date>1e3*this.oldTokenPayload.iat)throw{errCode:n.TOKEN_EXPIRED}}return this.userRecord}async updateUserRecord(e){await C.doc(this.uid).update(e)}async getUserPermission(){if(this.userPermission)return this.userPermission;const e=(await this.getUserRecord()).role||[];if(0===e.length)return this.userPermission={role:[],permission:[]},this.userPermission;if(e.includes("admin"))return this.userPermission={role:["admin"],permission:[]},this.userPermission;const t=await m.where({role_id:_.in(e)}).get(),n=(i=t.data.reduce((e,t)=>(t.permission&&e.push(...t.permission),e),[]),Array.from(new Set(i)));var i;return this.userPermission={role:e,permission:n},this.userPermission}async _createToken({uid:e,role:t,permission:i}={}){if(!t||!i){const e=await this.getUserPermission();t=e.role,i=e.permission}let r={uid:e,role:t,permission:i};if(this.uniId.interceptorMap.has("customToken")){const n=this.uniId.interceptorMap.get("customToken");if("function"!=typeof n)throw new Error("Invalid custom token file");r=await n({uid:e,role:t,permission:i})}const o=Date.now(),{tokenSecret:s,tokenExpiresIn:c}=this.config,a=g({...r,uniIdVersion:"1.0.13"},s,{expiresIn:c}),u=await this.getUserRecord(),d=(u.token||[]).filter(e=>{try{const t=this._checkToken(e);if(u.valid_token_date&&u.valid_token_date>1e3*t.iat)return!1}catch(e){if(e.errCode===n.TOKEN_EXPIRED)return!1}return!0});return d.push(a),await this.updateUserRecord({last_login_ip:this.clientInfo.clientIP,last_login_date:o,token:d}),{token:a,tokenExpired:o+1e3*c}}async createToken({uid:e,role:t,permission:i}={}){if(!e)throw{errCode:n.PARAM_REQUIRED,errMsgValue:{param:"uid"}};this.uid=e;const{token:r,tokenExpired:o}=await this._createToken({uid:e,role:t,permission:i});return{errCode:0,token:r,tokenExpired:o}}async refreshToken({token:e}={}){if(!e)throw{errCode:n.PARAM_REQUIRED,errMsgValue:{param:"token"}};this.oldToken=e;const t=this._checkToken(e);this.uid=t.uid,this.oldTokenPayload=t;const{uid:i}=t,{role:r,permission:o}=await this.getUserPermission(),{token:s,tokenExpired:c}=await this._createToken({uid:i,role:r,permission:o});return{errCode:0,token:s,tokenExpired:c}}_checkToken(e){const{tokenSecret:t}=this.config;let i;try{i=k(e,t)}catch(e){if("TokenExpiredError"===e.name)throw{errCode:n.TOKEN_EXPIRED};throw{errCode:n.CHECK_TOKEN_FAILED}}return i}async checkToken(e,{autoRefresh:t=!0}={}){if(!e)throw{errCode:n.PARAM_REQUIRED,errMsgValue:{param:"token"}};this.oldToken=e;const i=this._checkToken(e);this.uid=i.uid,this.oldTokenPayload=i;const{tokenExpiresThreshold:r}=this.config,{uid:o,role:s,permission:c}=i,a={role:s,permission:c};if(!s&&!c){const{role:e,permission:t}=await this.getUserPermission();a.role=e,a.permission=t}if(!r||!t){const e={code:0,errCode:0,...i,...a};return delete e.uniIdVersion,e}const u=Date.now();let d={};1e3*i.exp-u<1e3*r&&(d=await this._createToken({uid:o}));const l={code:0,errCode:0,...i,...a,...d};return delete l.uniIdVersion,l}}var E=Object.freeze({__proto__:null,checkToken:async function(e,{autoRefresh:t=!0}={}){return new T({uniId:this}).checkToken(e,{autoRefresh:t})},createToken:async function({uid:e,role:t,permission:n}={}){return new T({uniId:this}).createToken({uid:e,role:t,permission:n})},refreshToken:async function({token:e}={}){return new T({uniId:this}).refreshToken({token:e})}});const w=require("uni-config-center")({pluginId:"uni-id"});class A{constructor({context:e,clientInfo:t,config:n}={}){this._clientInfo=e?function(e){return{appId:e.APPID,platform:e.PLATFORM,locale:e.LOCALE,clientIP:e.CLIENTIP,deviceId:e.DEVICEID}}(e):t,this.config=n||this._getOriginConfig(),this.interceptorMap=new Map,w.hasFile("custom-token.js")&&this.setInterceptor("customToken",require(w.resolve("custom-token.js"))),this._i18n=uniCloud.initI18n({locale:this._clientInfo.locale,fallbackLocale:"zh-Hans",messages:d})}setInterceptor(e,t){this.interceptorMap.set(e,t)}_t(...e){return this._i18n.t(...e)}_parseOriginConfig(e){return Array.isArray(e)?e:e[0]?Object.values(e):e}_getOriginConfig(){if(w.hasFile("config.json")){let e;try{e=w.config()}catch(e){throw new Error("Invalid uni-id config file\n"+e.message)}return this._parseOriginConfig(e)}try{return this._parseOriginConfig(require("uni-id/config.json"))}catch(e){throw new Error("Invalid uni-id config file")}}_getAppConfig(){const e=this._getOriginConfig();return Array.isArray(e)?e.find(e=>e.dcloudAppid===this._clientInfo.appId)||e.find(e=>e.isDefaultConfig):e}_getPlatformConfig(){const e=this._getAppConfig();if(!e)throw new Error(`Config for current app (${this._clientInfo.appId}) was not found, please check your config file or client appId`);let t;switch("app-plus"===this._clientInfo.platform&&(this._clientInfo.platform="app"),"h5"===this._clientInfo.platform&&(this._clientInfo.platform="web"),this._clientInfo.platform){case"web":t="h5";break;case"app":t="app-plus"}const n=[{tokenExpiresIn:7200,tokenExpiresThreshold:1200,passwordErrorLimit:6,passwordErrorRetryTime:3600},e];t&&e[t]&&n.push(e[t]),n.push(e[this._clientInfo.platform]);const i=Object.assign(...n);return["tokenSecret","tokenExpiresIn"].forEach(e=>{if(!i||!i[e])throw new Error(`Config parameter missing, ${e} is required`)}),i}_getConfig(){return this._getPlatformConfig()}}for(const e in E)A.prototype[e]=E[e];function y(e){const t=new A(e);return new Proxy(t,{get(e,t){if(t in e&&0!==t.indexOf("_")){if("function"==typeof e[t])return(n=e[t],function(){let e;try{e=n.apply(this,arguments)}catch(e){if(a(e))return c.call(this,e),e;throw e}return i(e)?e.then(e=>(a(e)&&c.call(this,e),e),e=>{if(a(e))return c.call(this,e),e;throw e}):(a(e)&&c.call(this,e),e)}).bind(e);if("context"!==t&&"config"!==t)return e[t]}var n}})}A.prototype.createInstance=y;const x={createInstance:y};module.exports=x; diff --git a/uni_modules/uni-id-pages/pages/register/register.vue b/uni_modules/uni-id-pages/pages/register/register.vue index 28c5d12..e769f34 100644 --- a/uni_modules/uni-id-pages/pages/register/register.vue +++ b/uni_modules/uni-id-pages/pages/register/register.vue @@ -53,9 +53,6 @@ mutations } from '@/uni_modules/uni-id-pages/common/store.js' - const { - loginSuccess - } = mutations const uniIdCo = uniCloud.importObject("uni-id-co") export default { mixins: [mixin], @@ -118,7 +115,7 @@ submitForm(params) { uniIdCo.registerUser(this.formData).then(e => { console.log(e); - loginSuccess() + this.loginSuccess(e) }) .catch(e => { console.log(e); diff --git a/uni_modules/uni-id-pages/static/login/weixin.png b/uni_modules/uni-id-pages/static/login/weixin.png index 913a9d1d6959aef1b0efef8171f74f6878adfd37..6976b691fbeb313301bd55bb3e949722319c228c 100644 GIT binary patch delta 11525 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 delta 11792 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 -- GitLab