import Vuex from '@/store/index.js' export function univerifyLogin() { const commit = Vuex.commit; const PROVIDER = 'univerify'; /** * reject(true) 点击其他登录方式 * reject(false) 关闭登录框 */ return new Promise((resolve, reject) => { uni.getProvider({ service: 'oauth', success: (res) => { if (res.provider.indexOf(PROVIDER) !== -1) { // 一键登录已在APP onLaunch的时候进行了预登陆,可以显著提高登录速度。登录成功后,预登陆状态会重置 uni.login({ provider: PROVIDER, success: (res) => { uni.closeAuthView(); uni.showLoading(); uniCloud.callFunction({ name: 'user-center', data: { action: 'loginByUniverify', params: res.authResult }, success: (e) => { console.log('login success', e); if (e.result.code == 0) { const username = e.result.username || e.result.mobile || '一键登录新用户' uni.setStorageSync('uni_id_token', e.result.token) uni.setStorageSync('username', username) uni.setStorageSync('login_type', 'online') commit('login', username) resolve(); uni.switchTab({ url: '../main/main', }); } else { uni.showModal({ title: `登录失败: ${e.result.code}`, content: e.result.message, showCancel: false }) console.log('登录失败', e); e.result.errMsg = e.result.message; } }, fail: (e) => { uni.showModal({ title: `登录失败`, content: e.errMsg, showCancel: false }) }, complete: () => { uni.hideLoading() } }) }, fail: (err) => { console.error('授权登录失败:' + JSON.stringify(err)); // 一键登录点击其他登录方式 if (err.code == 30002) { uni.closeAuthView(); reject(true); return; } // 关闭登录 if (err.code == 30003) { uni.closeAuthView(); reject(false); return; } reject(err); } }) } else { reject(); } }, fail: (err) => { console.error('获取服务供应商失败:' + err.errMsg); reject(err) } }); }) } export function univerifyErrorHandler(err, cb) { if (!err) { cb && cb() return }; const state = Vuex.state; const obj = { /* showCancel: true, cancelText: '其他登录方式', success(res) { if (res.cancel) { cb && cb() } } */ } switch (true) { // 未开通 case err.code == 1000: uni.showModal(Object.assign({ title: `登录失败`, content: `${err.errMsg},错误码:${err.code}\n开通指南:https://ask.dcloud.net.cn/article/37965`, }, obj)); break; // 预登陆失败 case err.code == 30005: uni.showModal(Object.assign({ showCancel: false, title: `预登录失败`, content: `${err.errMsg},错误码:${err.code}` }, obj)); break; //用户关闭验证界面 case err.code != 30003: uni.showModal(Object.assign({ showCancel: false, title: `登录失败`, content: `${err.errMsg},错误码:${err.code}`, }, obj)); break; } }