zhangzengfei
2021-06-07 a002d27f6329cec2c3aeafa28f8d4ffd2cbf901b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
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;
    }
}