// 导入 autoReportPushClientId 模块,将再重新登录会 token 续期后自动将客户端上报到服务端 // import reportPushClientId from '@/uni_modules/uni-id-pages-x/lib/autoReportPushClientId.uts' // 导入配置 import config from '@/uni_modules/uni-id-pages-x/config.uts' import {state} from '@/uni_modules/uni-id-pages-x/store.uts'; // uni-id的云对象 const uniIdCo = uniCloud.importObject('uni-id-co', { customUI: true }) // 用户配置的登录方式、是否打开调试模式 const loginTypes = config.getArray('loginTypes'); const debug = config.getBoolean('debug') as boolean; export default async function () { // 有打开调试模式的情况下 if (debug) { // 1. 检查本地uni-id-pages中配置的登录方式,服务器端是否已经配置正确。否则提醒并引导去配置 // 调用云对象,获取服务端已正确配置的登录方式 const res = await uniIdCo.getSupportedLoginType() let supportedLoginType = res.getArray('supportedLoginType') if(supportedLoginType == null){ supportedLoginType = [] } // 登录方式,服务端和客户端的映射关系 const data:UTSJSONObject = { "smsCode": 'mobile-code', "univerify": 'univerify', "username": 'username-password', "weixin": 'weixin', "qq": 'qq', "xiaomi": 'xiaomi', "sinaweibo": 'sinaweibo', "taobao": 'taobao', "facebook": 'facebook', "google": 'google', "alipay": 'alipay', "apple": 'apple', "weixinMobile": 'weixin' }; // 遍历客户端配置的登录方式,与服务端比对。并在错误时抛出错误提示 const list = loginTypes?.filter((type:string):boolean =>{ let currentType = data.getString(type); if(currentType == null){ currentType = "" } return !(supportedLoginType.includes(currentType)) }) if (list?.length != 0) { console.error( `错误:前端启用的登录方式:${list?.join(',')};没有在服务端完成配置。配置文件路径:"/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json"` ) } } // #ifdef UNI-APP-X // 如果uni-id-pages配置的登录功能有一键登录,有则执行预登录(异步) // if (loginTypes.includes('univerify')) { // // uni.preLogin({ // // provider: 'univerify', // // complete: e => { // // // console.log(e); // // } // // }) // } // #endif // // 3. 绑定clientDB错误事件 // // clientDB对象 // const db = uniCloud.database() // db.on('error', onDBError) // // clientDB的错误提示 // function onDBError ({ // code, // 错误码详见https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=returnvalue // message // }) { // // console.error('onDBError', {code,message}); // } // // 解绑clientDB错误事件 // // db.off('error', onDBError) const checkNeedLogin = (url:string):boolean=>{ if(state.isLogin){ return false } const needLogin = config.getArray('needLogin') if (needLogin != null) { return needLogin.every((item:string):boolean => { return item == url || new RegExp(item).test(url) }) }else{ return false } } uni.addInterceptor('navigateTo',{ invoke:(e:NavigateToOptions)=>{ if (checkNeedLogin(e.url)) { uni.showToast({ title: '请先登录', icon: 'none' }) e.url = "/uni_modules/uni-id-pages-x/pages/login/login?uniIdRedirectUrl=" + encodeURIComponent(e.url) } } }) uni.addInterceptor('redirectTo',{ invoke:(e:RedirectToOptions)=>{ if (checkNeedLogin(e.url)) { uni.showToast({ title: '请先登录', icon: 'none' }) e.url = "/uni_modules/uni-id-pages-x/pages/login/login?uniIdRedirectUrl=" + encodeURIComponent(e.url) } } }) }