@norcy/react-native-toolkit 0.3.21 → 0.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/AppleLoginUtil.js +2 -4
- package/lib/commonjs/AppleLoginUtil.js.map +1 -1
- package/lib/commonjs/HuaweiLoginUtil.js +10 -22
- package/lib/commonjs/HuaweiLoginUtil.js.map +1 -1
- package/lib/commonjs/LoginManager.js +91 -90
- package/lib/commonjs/LoginManager.js.map +1 -1
- package/lib/commonjs/WeChatLoginUtil.js +32 -56
- package/lib/commonjs/WeChatLoginUtil.js.map +1 -1
- package/lib/commonjs/constant.js.map +1 -1
- package/lib/module/AppleLoginUtil.js +2 -4
- package/lib/module/AppleLoginUtil.js.map +1 -1
- package/lib/module/HuaweiLoginUtil.js +10 -22
- package/lib/module/HuaweiLoginUtil.js.map +1 -1
- package/lib/module/LoginManager.js +91 -90
- package/lib/module/LoginManager.js.map +1 -1
- package/lib/module/WeChatLoginUtil.js +32 -56
- package/lib/module/WeChatLoginUtil.js.map +1 -1
- package/lib/module/constant.js.map +1 -1
- package/lib/typescript/AppleLoginUtil.d.ts +5 -1
- package/lib/typescript/AppleLoginUtil.d.ts.map +1 -1
- package/lib/typescript/HuaweiLoginUtil.d.ts +2 -7
- package/lib/typescript/HuaweiLoginUtil.d.ts.map +1 -1
- package/lib/typescript/LoginManager.d.ts +1 -1
- package/lib/typescript/LoginManager.d.ts.map +1 -1
- package/lib/typescript/WeChatLoginUtil.d.ts +3 -2
- package/lib/typescript/WeChatLoginUtil.d.ts.map +1 -1
- package/lib/typescript/constant.d.ts +6 -0
- package/lib/typescript/constant.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/AppleLoginUtil.ts +6 -6
- package/src/HuaweiLoginUtil.ts +11 -24
- package/src/LoginManager.ts +67 -103
- package/src/WeChatLoginUtil.ts +54 -71
- package/src/constant.ts +7 -0
package/src/LoginManager.ts
CHANGED
|
@@ -14,14 +14,6 @@ import {
|
|
|
14
14
|
UserType,
|
|
15
15
|
} from './constant';
|
|
16
16
|
|
|
17
|
-
type WeChatCallbackResult = {
|
|
18
|
-
nickname: string;
|
|
19
|
-
headimgurl: string;
|
|
20
|
-
openid: string;
|
|
21
|
-
unionid: string;
|
|
22
|
-
error: any;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
17
|
type FetchImageFunctionType = ({ headimgurl }: { headimgurl: string }) => void;
|
|
26
18
|
export type LoginSuccessResultType = {
|
|
27
19
|
isAuto?: boolean;
|
|
@@ -33,25 +25,19 @@ export type LoginFailResultType = {
|
|
|
33
25
|
code?: string;
|
|
34
26
|
};
|
|
35
27
|
|
|
36
|
-
type LoginFinishParams =
|
|
37
|
-
isAuto?: boolean;
|
|
38
|
-
|
|
39
|
-
error?: string | object;
|
|
40
|
-
code?: string;
|
|
41
|
-
};
|
|
28
|
+
type LoginFinishParams =
|
|
29
|
+
| { isAuto?: boolean; user: UserType }
|
|
30
|
+
| { isAuto?: boolean; error: unknown; code?: string };
|
|
42
31
|
|
|
43
|
-
const onLoginFinish = ({
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
error,
|
|
47
|
-
code,
|
|
48
|
-
}: LoginFinishParams) => {
|
|
49
|
-
if (user) {
|
|
32
|
+
const onLoginFinish = (params: LoginFinishParams) => {
|
|
33
|
+
if ('user' in params) {
|
|
34
|
+
const { isAuto = false, user } = params;
|
|
50
35
|
PrefData.setValue(BuildInPrefs.LastLoginType, user.type);
|
|
51
36
|
const data = { isAuto, user };
|
|
52
37
|
console.log('onLoginSuccess', data);
|
|
53
38
|
Notification.postNotification('onLoginSuccess', data);
|
|
54
39
|
} else {
|
|
40
|
+
const { isAuto = false, error, code } = params;
|
|
55
41
|
const data = { isAuto, error, code };
|
|
56
42
|
console.log('onLoginFail', data);
|
|
57
43
|
Notification.postNotification('onLoginFail', data);
|
|
@@ -124,9 +110,9 @@ export const LoginManager = {
|
|
|
124
110
|
|
|
125
111
|
AppleLoginUtil.fetchAndUpdateCredentialState(
|
|
126
112
|
userData.userId,
|
|
127
|
-
({ result, error:
|
|
128
|
-
if (
|
|
129
|
-
onLoginFinish({ error:
|
|
113
|
+
({ result, error: credentialError }) => {
|
|
114
|
+
if (credentialError || result !== LoginState.AUTHORIZED) {
|
|
115
|
+
onLoginFinish({ error: credentialError });
|
|
130
116
|
} else {
|
|
131
117
|
loadingCallback?.();
|
|
132
118
|
doLogin(userData.authData, userData);
|
|
@@ -135,62 +121,40 @@ export const LoginManager = {
|
|
|
135
121
|
);
|
|
136
122
|
}
|
|
137
123
|
} else if (type === LoginType.LoginTypeWeChat) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
124
|
+
try {
|
|
125
|
+
const { nickname, headimgurl, openid, unionid } =
|
|
126
|
+
await WeChatLoginUtil.doLogin(
|
|
127
|
+
ToolkitConfig.WeiXinId,
|
|
128
|
+
ToolkitConfig.WeiXinSecret
|
|
129
|
+
);
|
|
130
|
+
let userData = {
|
|
142
131
|
nickname,
|
|
143
132
|
headimgurl,
|
|
144
|
-
openid,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
let userData = {
|
|
152
|
-
nickname: nickname,
|
|
153
|
-
headimgurl: headimgurl,
|
|
154
|
-
authData: {
|
|
155
|
-
openid: openid,
|
|
156
|
-
unionid: unionid,
|
|
157
|
-
loginType: 'wechat',
|
|
158
|
-
},
|
|
159
|
-
};
|
|
160
|
-
loadingCallback?.();
|
|
161
|
-
doLogin(userData.authData, userData);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
);
|
|
133
|
+
authData: { openid, unionid, loginType: 'wechat' as const },
|
|
134
|
+
};
|
|
135
|
+
loadingCallback?.();
|
|
136
|
+
doLogin(userData.authData, userData);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
onLoginFinish({ error });
|
|
139
|
+
}
|
|
165
140
|
} else if (type === LoginType.LoginTypeWeChatScan) {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
141
|
+
try {
|
|
142
|
+
const { nickname, headimgurl, openid, unionid } =
|
|
143
|
+
await WeChatLoginUtil.doLoginByScan(
|
|
144
|
+
ToolkitConfig.WeiXinId,
|
|
145
|
+
ToolkitConfig.WeiXinSecret,
|
|
146
|
+
qrcodeCallback!
|
|
147
|
+
);
|
|
148
|
+
let userData = {
|
|
171
149
|
nickname,
|
|
172
150
|
headimgurl,
|
|
173
|
-
openid,
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
let userData = {
|
|
181
|
-
nickname: nickname,
|
|
182
|
-
headimgurl: headimgurl,
|
|
183
|
-
authData: {
|
|
184
|
-
openid: openid,
|
|
185
|
-
unionid: unionid,
|
|
186
|
-
loginType: 'wechat',
|
|
187
|
-
},
|
|
188
|
-
};
|
|
189
|
-
loadingCallback?.();
|
|
190
|
-
doLogin(userData.authData, userData);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
);
|
|
151
|
+
authData: { openid, unionid, loginType: 'wechat' as const },
|
|
152
|
+
};
|
|
153
|
+
loadingCallback?.();
|
|
154
|
+
doLogin(userData.authData, userData);
|
|
155
|
+
} catch (error) {
|
|
156
|
+
onLoginFinish({ error });
|
|
157
|
+
}
|
|
194
158
|
} else if (type === LoginType.LoginTypeVisitor) {
|
|
195
159
|
const uniqueId = getUniqueIdSync();
|
|
196
160
|
console.log(uniqueId);
|
|
@@ -204,25 +168,19 @@ export const LoginManager = {
|
|
|
204
168
|
loadingCallback?.();
|
|
205
169
|
doLogin(userData.authData, userData);
|
|
206
170
|
} else if (type === LoginType.LoginTypeHuawei) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
};
|
|
221
|
-
loadingCallback?.();
|
|
222
|
-
doLogin(userData.authData, userData);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
);
|
|
171
|
+
try {
|
|
172
|
+
const { nickname, headimgurl, openid, unionid } =
|
|
173
|
+
await HuaweiLoginUtil.doLogin();
|
|
174
|
+
let userData = {
|
|
175
|
+
nickname,
|
|
176
|
+
headimgurl,
|
|
177
|
+
authData: { openid, unionid, loginType: 'huawei' as const },
|
|
178
|
+
};
|
|
179
|
+
loadingCallback?.();
|
|
180
|
+
doLogin(userData.authData, userData);
|
|
181
|
+
} catch (error) {
|
|
182
|
+
onLoginFinish({ error });
|
|
183
|
+
}
|
|
226
184
|
} else {
|
|
227
185
|
onLoginFinish({ error: 'Unknown Login Type' });
|
|
228
186
|
}
|
|
@@ -266,7 +224,11 @@ export const LoginManager = {
|
|
|
266
224
|
}
|
|
267
225
|
},
|
|
268
226
|
|
|
269
|
-
updateUser: (
|
|
227
|
+
updateUser: (
|
|
228
|
+
key: string,
|
|
229
|
+
value: any,
|
|
230
|
+
callback?: (error?: unknown) => void
|
|
231
|
+
) => {
|
|
270
232
|
LoginManager.batchUpdateUser([key], [value], callback);
|
|
271
233
|
},
|
|
272
234
|
|
|
@@ -295,14 +257,16 @@ export const LoginManager = {
|
|
|
295
257
|
return PrefData.getValue(BuildInPrefs.RegisterInThisDevice);
|
|
296
258
|
},
|
|
297
259
|
|
|
298
|
-
fetchWeChatAvatar: (callback: FetchImageFunctionType) => {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
}
|
|
305
|
-
)
|
|
260
|
+
fetchWeChatAvatar: async (callback: FetchImageFunctionType) => {
|
|
261
|
+
try {
|
|
262
|
+
const { headimgurl } = await WeChatLoginUtil.doLogin(
|
|
263
|
+
ToolkitConfig.WeiXinId,
|
|
264
|
+
ToolkitConfig.WeiXinSecret
|
|
265
|
+
);
|
|
266
|
+
callback({ headimgurl });
|
|
267
|
+
} catch (_) {
|
|
268
|
+
// 获取头像失败,忽略
|
|
269
|
+
}
|
|
306
270
|
},
|
|
307
271
|
|
|
308
272
|
getRegisterDays: () => {
|
package/src/WeChatLoginUtil.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { sha1 } from 'js-sha1';
|
|
2
2
|
import { NativeEventEmitter, NativeModules } from 'react-native';
|
|
3
3
|
import * as WeChat from 'react-native-wechat-lib';
|
|
4
|
+
import { ThirdPartyUserInfo } from './constant';
|
|
4
5
|
import { Tool } from './Tool';
|
|
5
6
|
|
|
6
7
|
// https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
|
|
@@ -44,13 +45,12 @@ const createSignature = (
|
|
|
44
45
|
return ret;
|
|
45
46
|
};
|
|
46
47
|
|
|
47
|
-
const getUserInfo = (
|
|
48
|
+
const getUserInfo = async (
|
|
48
49
|
WeiXinId: string,
|
|
49
50
|
WeiXinSecret: string,
|
|
50
|
-
code: string
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
let accessTokenUrl =
|
|
51
|
+
code: string
|
|
52
|
+
): Promise<ThirdPartyUserInfo> => {
|
|
53
|
+
const accessTokenUrl =
|
|
54
54
|
'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' +
|
|
55
55
|
WeiXinId +
|
|
56
56
|
'&secret=' +
|
|
@@ -58,64 +58,43 @@ const getUserInfo = (
|
|
|
58
58
|
'&code=' +
|
|
59
59
|
code +
|
|
60
60
|
'&grant_type=authorization_code';
|
|
61
|
-
fetch(accessTokenUrl)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
callback({
|
|
79
|
-
nickname: json.nickname,
|
|
80
|
-
headimgurl: json.headimgurl,
|
|
81
|
-
openid: json.openid,
|
|
82
|
-
unionid: json.unionid,
|
|
83
|
-
});
|
|
84
|
-
})
|
|
85
|
-
.catch((e) => {
|
|
86
|
-
console.warn('wechat get user info fail ', e);
|
|
87
|
-
callback({ error: e });
|
|
88
|
-
});
|
|
89
|
-
})
|
|
90
|
-
.catch((e) => {
|
|
91
|
-
console.warn('wechat get access code fail ', e);
|
|
92
|
-
callback({ error: e });
|
|
93
|
-
});
|
|
61
|
+
const res = await (await fetch(accessTokenUrl)).json();
|
|
62
|
+
console.log('wechat get access code success: ', res.access_token);
|
|
63
|
+
|
|
64
|
+
const userInfoUrl =
|
|
65
|
+
'https://api.weixin.qq.com/sns/userinfo?access_token=' +
|
|
66
|
+
res.access_token +
|
|
67
|
+
'&openid=' +
|
|
68
|
+
res.openid;
|
|
69
|
+
const json = await (await fetch(userInfoUrl)).json();
|
|
70
|
+
console.log('wechat get user info success: ', json);
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
nickname: json.nickname,
|
|
74
|
+
headimgurl: json.headimgurl,
|
|
75
|
+
openid: json.openid,
|
|
76
|
+
unionid: json.unionid,
|
|
77
|
+
};
|
|
94
78
|
};
|
|
95
79
|
|
|
96
80
|
export const WeChatLoginUtil = {
|
|
97
|
-
doLogin: (
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
.catch((e: any) => {
|
|
108
|
-
console.warn('wechat auth fail ', e);
|
|
109
|
-
callback({ error: e });
|
|
110
|
-
});
|
|
81
|
+
doLogin: async (
|
|
82
|
+
WeiXinId: string,
|
|
83
|
+
WeiXinSecret: string
|
|
84
|
+
): Promise<ThirdPartyUserInfo> => {
|
|
85
|
+
const ret = await WeChat.sendAuthRequest('snsapi_userinfo');
|
|
86
|
+
console.log('wechat auth success ', ret);
|
|
87
|
+
if (!ret?.code) {
|
|
88
|
+
throw new Error('Auth code 获取失败');
|
|
89
|
+
}
|
|
90
|
+
return getUserInfo(WeiXinId, WeiXinSecret, ret.code);
|
|
111
91
|
},
|
|
112
92
|
|
|
113
93
|
doLoginByScan: async (
|
|
114
94
|
WeiXinId: string,
|
|
115
95
|
WeiXinSecret: string,
|
|
116
|
-
onQRGet: (qrcode: string) => void
|
|
117
|
-
|
|
118
|
-
) => {
|
|
96
|
+
onQRGet: (qrcode: string) => void
|
|
97
|
+
): Promise<ThirdPartyUserInfo> => {
|
|
119
98
|
const accessToken = await getAccessToken(WeiXinId, WeiXinSecret);
|
|
120
99
|
const ticket = await getSDKTicket(accessToken);
|
|
121
100
|
const nonceStr = Tool.generateObjectId();
|
|
@@ -128,22 +107,26 @@ export const WeChatLoginUtil = {
|
|
|
128
107
|
onQRGet(res.qrcode)
|
|
129
108
|
);
|
|
130
109
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
110
|
+
const authCode = await new Promise<string>((resolve, reject) => {
|
|
111
|
+
NativeModules.WeChat.authByScan(
|
|
112
|
+
WeiXinId,
|
|
113
|
+
nonceStr,
|
|
114
|
+
timestamp,
|
|
115
|
+
'snsapi_userinfo',
|
|
116
|
+
signature,
|
|
117
|
+
'',
|
|
118
|
+
(ret: any) => {
|
|
119
|
+
console.log('scan result', ret);
|
|
120
|
+
subscription.remove();
|
|
121
|
+
if (!ret?.authCode) {
|
|
122
|
+
reject(new Error('Auth code 获取失败'));
|
|
123
|
+
} else {
|
|
124
|
+
resolve(ret.authCode);
|
|
125
|
+
}
|
|
144
126
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
127
|
+
);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
return getUserInfo(WeiXinId, WeiXinSecret, authCode);
|
|
148
131
|
},
|
|
149
132
|
};
|
package/src/constant.ts
CHANGED
|
@@ -26,6 +26,13 @@ export interface LoginUserDataType {
|
|
|
26
26
|
authData: LoginAuthDataType;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
export interface ThirdPartyUserInfo {
|
|
30
|
+
nickname: string;
|
|
31
|
+
headimgurl: string;
|
|
32
|
+
openid: string;
|
|
33
|
+
unionid: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
29
36
|
export enum LoginState {
|
|
30
37
|
NOTLOGIN,
|
|
31
38
|
AUTHORIZED,
|