@cloudbase/auth 1.7.3-alpha.0 → 1.8.1
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/.eslintrc.js +13 -0
- package/dist/cjs/constants.d.ts +0 -1
- package/dist/cjs/constants.js +2 -3
- package/dist/cjs/index.d.ts +9 -13
- package/dist/cjs/index.js +120 -198
- package/dist/cjs/providers/anonymousAuthProvider.js +25 -23
- package/dist/cjs/providers/base.d.ts +1 -2
- package/dist/cjs/providers/base.js +12 -6
- package/dist/cjs/providers/customAuthProvider.js +15 -14
- package/dist/cjs/providers/emailAuthProvider.js +27 -29
- package/dist/cjs/providers/phoneAuthProvider.js +22 -24
- package/dist/cjs/providers/usernameAuthProvider.js +17 -17
- package/dist/cjs/providers/weixinAuthProvider.js +31 -30
- package/dist/esm/constants.d.ts +0 -1
- package/dist/esm/constants.js +1 -2
- package/dist/esm/index.d.ts +9 -13
- package/dist/esm/index.js +121 -199
- package/dist/esm/providers/anonymousAuthProvider.js +25 -23
- package/dist/esm/providers/base.d.ts +1 -2
- package/dist/esm/providers/base.js +12 -6
- package/dist/esm/providers/customAuthProvider.js +15 -14
- package/dist/esm/providers/emailAuthProvider.js +27 -29
- package/dist/esm/providers/phoneAuthProvider.js +22 -24
- package/dist/esm/providers/usernameAuthProvider.js +17 -17
- package/dist/esm/providers/weixinAuthProvider.js +31 -30
- package/package.json +8 -12
- package/src/constants.ts +0 -2
- package/src/index.ts +128 -245
- package/src/providers/anonymousAuthProvider.ts +15 -18
- package/src/providers/base.ts +7 -20
- package/src/providers/customAuthProvider.ts +12 -15
- package/src/providers/emailAuthProvider.ts +21 -24
- package/src/providers/phoneAuthProvider.ts +22 -23
- package/src/providers/usernameAuthProvider.ts +10 -11
- package/src/providers/weixinAuthProvider.ts +45 -46
- package/tsconfig.esm.json +2 -19
- package/tsconfig.json +2 -19
- package/.eslintrc +0 -30
- package/dist/cjs/common.d.ts +0 -8
- package/dist/cjs/common.js +0 -64
- package/dist/cjs/providers/oauth2AuthProvider.d.ts +0 -61
- package/dist/cjs/providers/oauth2AuthProvider.js +0 -404
- package/dist/esm/common.d.ts +0 -8
- package/dist/esm/common.js +0 -61
- package/dist/esm/providers/oauth2AuthProvider.d.ts +0 -61
- package/dist/esm/providers/oauth2AuthProvider.js +0 -401
- package/src/common.ts +0 -21
- package/src/providers/oauth2AuthProvider.ts +0 -585
|
@@ -9,10 +9,10 @@ import { EVENTS, eventBus, LoginState } from '..';
|
|
|
9
9
|
const { ERRORS, COMMUNITY_SITE_URL } = constants;
|
|
10
10
|
const { throwError, isString } = utils;
|
|
11
11
|
const { addEventListener } = events;
|
|
12
|
-
const { catchErrorsDecorator
|
|
12
|
+
const { catchErrorsDecorator } = helpers;
|
|
13
13
|
|
|
14
14
|
export class AnonymousAuthProvider extends AuthProvider {
|
|
15
|
-
constructor(config: ICloudbaseAuthConfig
|
|
15
|
+
constructor(config: ICloudbaseAuthConfig&{cache: ICloudbaseCache, request: ICloudbaseRequest}) {
|
|
16
16
|
super(config);
|
|
17
17
|
|
|
18
18
|
this._onConverted = this._onConverted.bind(this);
|
|
@@ -20,15 +20,14 @@ export class AnonymousAuthProvider extends AuthProvider {
|
|
|
20
20
|
addEventListener(EVENTS.ANONYMOUS_CONVERTED, this._onConverted);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
@stopAuthLoginWithOAuth()
|
|
24
23
|
@catchErrorsDecorator({
|
|
25
24
|
title: '匿名登录失败',
|
|
26
25
|
messages: [
|
|
27
26
|
'请确认以下各项:',
|
|
28
27
|
' 1 - 当前环境是否开启了匿名登录',
|
|
29
28
|
' 2 - 调用 auth().anonymouseProvider().signIn() 的语法或参数是否正确',
|
|
30
|
-
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}
|
|
31
|
-
]
|
|
29
|
+
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,
|
|
30
|
+
],
|
|
32
31
|
})
|
|
33
32
|
public async signIn(): Promise<ILoginState> {
|
|
34
33
|
// 匿名登录前迁移cache到localstorage
|
|
@@ -41,7 +40,7 @@ export class AnonymousAuthProvider extends AuthProvider {
|
|
|
41
40
|
|
|
42
41
|
const res = await this._request.send('auth.signInAnonymously', {
|
|
43
42
|
anonymous_uuid,
|
|
44
|
-
refresh_token
|
|
43
|
+
refresh_token,
|
|
45
44
|
});
|
|
46
45
|
if (res.uuid && res.refresh_token) {
|
|
47
46
|
await this._setAnonymousUUID(res.uuid);
|
|
@@ -51,7 +50,7 @@ export class AnonymousAuthProvider extends AuthProvider {
|
|
|
51
50
|
eventBus.fire(EVENTS.LOGIN_TYPE_CHANGED, {
|
|
52
51
|
env: this._config.env,
|
|
53
52
|
loginType: LOGINTYPE.ANONYMOUS,
|
|
54
|
-
persistence: 'local'
|
|
53
|
+
persistence: 'local',
|
|
55
54
|
});
|
|
56
55
|
|
|
57
56
|
eventBus.fire(EVENTS.LOGIN_STATE_CHANGED);
|
|
@@ -59,17 +58,16 @@ export class AnonymousAuthProvider extends AuthProvider {
|
|
|
59
58
|
const loginState = new LoginState({
|
|
60
59
|
envId: this._config.env,
|
|
61
60
|
cache: this._cache,
|
|
62
|
-
request: this._request
|
|
61
|
+
request: this._request,
|
|
63
62
|
});
|
|
64
63
|
await loginState.checkLocalStateAsync();
|
|
65
64
|
await loginState.user.refresh();
|
|
66
65
|
return loginState;
|
|
67
|
-
} else {
|
|
68
|
-
throw new Error(JSON.stringify({
|
|
69
|
-
code: ERRORS.OPERATION_FAIL,
|
|
70
|
-
msg: JSON.stringify(res) || 'anonymous signIn failed'
|
|
71
|
-
}));
|
|
72
66
|
}
|
|
67
|
+
throw new Error(JSON.stringify({
|
|
68
|
+
code: ERRORS.OPERATION_FAIL,
|
|
69
|
+
msg: JSON.stringify(res) || 'anonymous signIn failed',
|
|
70
|
+
}));
|
|
73
71
|
}
|
|
74
72
|
/**
|
|
75
73
|
* 匿名转正
|
|
@@ -85,7 +83,7 @@ export class AnonymousAuthProvider extends AuthProvider {
|
|
|
85
83
|
const res = await this._request.send('auth.linkAndRetrieveDataWithTicket', {
|
|
86
84
|
anonymous_uuid,
|
|
87
85
|
refresh_token,
|
|
88
|
-
ticket
|
|
86
|
+
ticket,
|
|
89
87
|
});
|
|
90
88
|
if (res.refresh_token) {
|
|
91
89
|
// 转正后清除本地保存的匿名uuid
|
|
@@ -97,14 +95,13 @@ export class AnonymousAuthProvider extends AuthProvider {
|
|
|
97
95
|
const loginState = new LoginState({
|
|
98
96
|
envId: this._config.env,
|
|
99
97
|
cache: this._cache,
|
|
100
|
-
request: this._request
|
|
98
|
+
request: this._request,
|
|
101
99
|
});
|
|
102
100
|
await loginState.checkLocalStateAsync();
|
|
103
101
|
|
|
104
102
|
return loginState;
|
|
105
|
-
} else {
|
|
106
|
-
throwError(ERRORS.OPERATION_FAIL, JSON.stringify(res) || 'linkAndRetrieveDataWithTicket failed');
|
|
107
103
|
}
|
|
104
|
+
throwError(ERRORS.OPERATION_FAIL, JSON.stringify(res) || 'linkAndRetrieveDataWithTicket failed');
|
|
108
105
|
}
|
|
109
106
|
private async _setAnonymousUUID(id: string) {
|
|
110
107
|
const { anonymousUuidKey, loginTypeKey } = this._cache.keys;
|
|
@@ -123,4 +120,4 @@ export class AnonymousAuthProvider extends AuthProvider {
|
|
|
123
120
|
// 匿名转正后迁移cache
|
|
124
121
|
await this._cache.updatePersistenceAsync(this._config.persistence);
|
|
125
122
|
}
|
|
126
|
-
}
|
|
123
|
+
}
|
package/src/providers/base.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ICloudbaseConfig
|
|
1
|
+
import { ICloudbaseConfig } from '@cloudbase/types';
|
|
2
2
|
import { ICloudbaseCache } from '@cloudbase/types/cache';
|
|
3
3
|
import { ICloudbaseRequest } from '@cloudbase/types/request';
|
|
4
4
|
import { ICloudbaseAuthConfig } from '@cloudbase/types/auth';
|
|
@@ -8,13 +8,11 @@ export abstract class AuthProvider {
|
|
|
8
8
|
protected readonly _config: ICloudbaseConfig;
|
|
9
9
|
protected readonly _cache: ICloudbaseCache;
|
|
10
10
|
protected readonly _request: ICloudbaseRequest;
|
|
11
|
-
protected readonly _fromApp: ICloudbase;
|
|
12
11
|
|
|
13
|
-
constructor(config: ICloudbaseAuthConfig
|
|
12
|
+
constructor(config: ICloudbaseAuthConfig&{cache: ICloudbaseCache, request: ICloudbaseRequest}) {
|
|
14
13
|
this._config = config;
|
|
15
14
|
this._cache = config.cache;
|
|
16
15
|
this._request = config.request;
|
|
17
|
-
this._fromApp = config._fromApp
|
|
18
16
|
}
|
|
19
17
|
/**
|
|
20
18
|
* 判断本地是否已经有登录态,如果有且没过期,则返回true,否则清理本地登录态
|
|
@@ -30,16 +28,15 @@ export abstract class AuthProvider {
|
|
|
30
28
|
const loginState = new LoginState({
|
|
31
29
|
envId: this._config.env,
|
|
32
30
|
cache: this._cache,
|
|
33
|
-
request: this._request
|
|
31
|
+
request: this._request,
|
|
34
32
|
});
|
|
35
33
|
await loginState.checkLocalStateAsync();
|
|
36
34
|
|
|
37
35
|
return loginState;
|
|
38
|
-
} else {
|
|
39
|
-
// access token存在但是过期了,那么删除掉重新拉
|
|
40
|
-
// await this._cache.removeStoreAsync(accessTokenKey);
|
|
41
|
-
// await this._cache.removeStoreAsync(accessTokenExpireKey);
|
|
42
36
|
}
|
|
37
|
+
// access token存在但是过期了,那么删除掉重新拉
|
|
38
|
+
await this._cache.removeStoreAsync(accessTokenKey);
|
|
39
|
+
await this._cache.removeStoreAsync(accessTokenExpireKey);
|
|
43
40
|
}
|
|
44
41
|
}
|
|
45
42
|
protected async setRefreshToken(refreshToken: string) {
|
|
@@ -64,15 +61,5 @@ export abstract class AuthProvider {
|
|
|
64
61
|
const { userInfoKey } = this._cache.keys;
|
|
65
62
|
await this._cache.setStoreAsync(userInfoKey, userInfo);
|
|
66
63
|
}
|
|
67
|
-
|
|
68
|
-
// protected async stopAuthLoginWithOauth() {
|
|
69
|
-
// const { _fromApp } = this._config
|
|
70
|
-
// const checkRes = await checkFromAuthV1OrV2(_fromApp)
|
|
71
|
-
// const { authType } = checkRes
|
|
72
|
-
// console.log('authType', authType)
|
|
73
|
-
// if (authType === 'oauth') {
|
|
74
|
-
// throw Error('当前已使用 oauth 登录,请手动退出 oauth 登录后再进行 auth 登录')
|
|
75
|
-
// }
|
|
76
|
-
// }
|
|
77
64
|
abstract signIn(...args: any[]): Promise<any>;
|
|
78
|
-
}
|
|
65
|
+
}
|
|
@@ -7,11 +7,9 @@ import { eventBus, EVENTS, LoginState } from '..';
|
|
|
7
7
|
|
|
8
8
|
const { ERRORS, COMMUNITY_SITE_URL } = constants;
|
|
9
9
|
const { isString } = utils;
|
|
10
|
-
const { catchErrorsDecorator
|
|
10
|
+
const { catchErrorsDecorator } = helpers;
|
|
11
11
|
|
|
12
12
|
export class CustomAuthProvider extends AuthProvider {
|
|
13
|
-
|
|
14
|
-
@stopAuthLoginWithOAuth()
|
|
15
13
|
@catchErrorsDecorator({
|
|
16
14
|
title: '自定义登录失败',
|
|
17
15
|
messages: [
|
|
@@ -20,20 +18,20 @@ export class CustomAuthProvider extends AuthProvider {
|
|
|
20
18
|
' 2 - 调用 auth().customAuthProvider().signIn() 的语法或参数是否正确',
|
|
21
19
|
' 3 - ticket 是否归属于当前环境',
|
|
22
20
|
' 4 - 创建 ticket 的自定义登录私钥是否过期',
|
|
23
|
-
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}
|
|
24
|
-
]
|
|
21
|
+
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,
|
|
22
|
+
],
|
|
25
23
|
})
|
|
26
24
|
public async signIn(ticket: string): Promise<ILoginState> {
|
|
27
25
|
if (!isString(ticket)) {
|
|
28
26
|
throw new Error(JSON.stringify({
|
|
29
27
|
code: ERRORS.INVALID_PARAMS,
|
|
30
|
-
msg: 'ticket must be a string'
|
|
28
|
+
msg: 'ticket must be a string',
|
|
31
29
|
}));
|
|
32
30
|
}
|
|
33
31
|
const { refreshTokenKey } = this._cache.keys;
|
|
34
32
|
const res = await this._request.send('auth.signInWithTicket', {
|
|
35
33
|
ticket,
|
|
36
|
-
refresh_token: await this._cache.getStoreAsync(refreshTokenKey) || ''
|
|
34
|
+
refresh_token: await this._cache.getStoreAsync(refreshTokenKey) || '',
|
|
37
35
|
});
|
|
38
36
|
if (res.refresh_token) {
|
|
39
37
|
// 保存新refresh token并且刷新access token
|
|
@@ -43,7 +41,7 @@ export class CustomAuthProvider extends AuthProvider {
|
|
|
43
41
|
eventBus.fire(EVENTS.LOGIN_TYPE_CHANGED, {
|
|
44
42
|
env: this._config.env,
|
|
45
43
|
loginType: LOGINTYPE.CUSTOM,
|
|
46
|
-
persistence: this._config.persistence
|
|
44
|
+
persistence: this._config.persistence,
|
|
47
45
|
});
|
|
48
46
|
|
|
49
47
|
eventBus.fire(EVENTS.LOGIN_STATE_CHANGED);
|
|
@@ -54,16 +52,15 @@ export class CustomAuthProvider extends AuthProvider {
|
|
|
54
52
|
const loginState = new LoginState({
|
|
55
53
|
envId: this._config.env,
|
|
56
54
|
cache: this._cache,
|
|
57
|
-
request: this._request
|
|
55
|
+
request: this._request,
|
|
58
56
|
});
|
|
59
57
|
await loginState.checkLocalStateAsync();
|
|
60
58
|
|
|
61
59
|
return loginState;
|
|
62
|
-
} else {
|
|
63
|
-
throw new Error(JSON.stringify({
|
|
64
|
-
code: ERRORS.OPERATION_FAIL,
|
|
65
|
-
msg: 'custom signIn failed'
|
|
66
|
-
}));
|
|
67
60
|
}
|
|
61
|
+
throw new Error(JSON.stringify({
|
|
62
|
+
code: ERRORS.OPERATION_FAIL,
|
|
63
|
+
msg: 'custom signIn failed',
|
|
64
|
+
}));
|
|
68
65
|
}
|
|
69
|
-
}
|
|
66
|
+
}
|
|
@@ -6,11 +6,9 @@ import { eventBus, EVENTS, LoginState } from '..';
|
|
|
6
6
|
|
|
7
7
|
const { throwError, isString } = utils;
|
|
8
8
|
const { ERRORS, COMMUNITY_SITE_URL } = constants;
|
|
9
|
-
const { catchErrorsDecorator
|
|
9
|
+
const { catchErrorsDecorator } = helpers;
|
|
10
10
|
|
|
11
11
|
export class EmailAuthProvider extends AuthProvider {
|
|
12
|
-
|
|
13
|
-
@stopAuthLoginWithOAuth()
|
|
14
12
|
@catchErrorsDecorator({
|
|
15
13
|
title: '邮箱密码登录失败',
|
|
16
14
|
messages: [
|
|
@@ -18,8 +16,8 @@ export class EmailAuthProvider extends AuthProvider {
|
|
|
18
16
|
' 1 - 调用 auth().emailAuthProvider() 的语法或参数是否正确',
|
|
19
17
|
' 2 - 当前环境是否开通了邮箱登录',
|
|
20
18
|
' 3 - 邮箱地址与密码是否匹配',
|
|
21
|
-
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}
|
|
22
|
-
]
|
|
19
|
+
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,
|
|
20
|
+
],
|
|
23
21
|
})
|
|
24
22
|
public async signIn(email: string, password: string): Promise<ILoginState> {
|
|
25
23
|
if (!isString(email)) {
|
|
@@ -30,7 +28,7 @@ export class EmailAuthProvider extends AuthProvider {
|
|
|
30
28
|
loginType: 'EMAIL',
|
|
31
29
|
email,
|
|
32
30
|
password,
|
|
33
|
-
refresh_token: this._cache.getStore(refreshTokenKey) || ''
|
|
31
|
+
refresh_token: this._cache.getStore(refreshTokenKey) || '',
|
|
34
32
|
});
|
|
35
33
|
const { refresh_token, access_token, access_token_expire } = res;
|
|
36
34
|
if (refresh_token) {
|
|
@@ -46,17 +44,17 @@ export class EmailAuthProvider extends AuthProvider {
|
|
|
46
44
|
eventBus.fire(EVENTS.LOGIN_TYPE_CHANGED, {
|
|
47
45
|
env: this._config.env,
|
|
48
46
|
loginType: LOGINTYPE.EMAIL,
|
|
49
|
-
persistence: this._config.persistence
|
|
47
|
+
persistence: this._config.persistence,
|
|
50
48
|
});
|
|
51
49
|
return new LoginState({
|
|
52
50
|
envId: this._config.env,
|
|
53
51
|
cache: this._cache,
|
|
54
|
-
request: this._request
|
|
52
|
+
request: this._request,
|
|
55
53
|
});
|
|
56
|
-
}
|
|
54
|
+
} if (res.code) {
|
|
57
55
|
throwError(ERRORS.OPERATION_FAIL, `Email login fail[${res.code}] ${res.message}`);
|
|
58
56
|
} else {
|
|
59
|
-
throwError(ERRORS.OPERATION_FAIL,
|
|
57
|
+
throwError(ERRORS.OPERATION_FAIL, 'Email login fail');
|
|
60
58
|
}
|
|
61
59
|
}
|
|
62
60
|
/**
|
|
@@ -64,7 +62,6 @@ export class EmailAuthProvider extends AuthProvider {
|
|
|
64
62
|
* @param email
|
|
65
63
|
* @param password
|
|
66
64
|
*/
|
|
67
|
-
@stopAuthLoginWithOAuth()
|
|
68
65
|
@catchErrorsDecorator({
|
|
69
66
|
title: '邮箱注册失败',
|
|
70
67
|
messages: [
|
|
@@ -72,13 +69,13 @@ export class EmailAuthProvider extends AuthProvider {
|
|
|
72
69
|
' 1 - 调用 auth().signUpWithEmailAndPassword() 的语法或参数是否正确',
|
|
73
70
|
' 2 - 当前环境是否开通了邮箱登录',
|
|
74
71
|
' 3 - 此邮箱地址是否已经被其他用户占用',
|
|
75
|
-
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}
|
|
76
|
-
]
|
|
72
|
+
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,
|
|
73
|
+
],
|
|
77
74
|
})
|
|
78
75
|
public async signUp(email: string, password: string) {
|
|
79
76
|
return this._request.send('auth.signUpWithEmailAndPassword', {
|
|
80
77
|
email,
|
|
81
|
-
password
|
|
78
|
+
password,
|
|
82
79
|
});
|
|
83
80
|
}
|
|
84
81
|
/**
|
|
@@ -93,12 +90,12 @@ export class EmailAuthProvider extends AuthProvider {
|
|
|
93
90
|
' 2 - 当前环境是否开通了邮箱登录',
|
|
94
91
|
' 3 - 此邮箱地址是否已经与当前用户绑定',
|
|
95
92
|
' 4 - 此邮箱地址是否已经被其他用户占用',
|
|
96
|
-
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}
|
|
97
|
-
]
|
|
93
|
+
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,
|
|
94
|
+
],
|
|
98
95
|
})
|
|
99
96
|
public async resetPassword(email: string) {
|
|
100
97
|
return this._request.send('auth.sendPasswordResetEmail', {
|
|
101
|
-
email
|
|
98
|
+
email,
|
|
102
99
|
});
|
|
103
100
|
}
|
|
104
101
|
/**
|
|
@@ -112,13 +109,13 @@ export class EmailAuthProvider extends AuthProvider {
|
|
|
112
109
|
'请确认以下各项:',
|
|
113
110
|
' 1 - 调用语法或参数是否正确',
|
|
114
111
|
' 2 - 当前环境是否开通了邮箱登录',
|
|
115
|
-
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}
|
|
116
|
-
]
|
|
112
|
+
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,
|
|
113
|
+
],
|
|
117
114
|
})
|
|
118
115
|
public async resetPasswordWithToken(token: string, newPassword: string) {
|
|
119
116
|
return this._request.send('auth.resetPasswordWithToken', {
|
|
120
117
|
token,
|
|
121
|
-
newPassword
|
|
118
|
+
newPassword,
|
|
122
119
|
});
|
|
123
120
|
}
|
|
124
121
|
/**
|
|
@@ -131,12 +128,12 @@ export class EmailAuthProvider extends AuthProvider {
|
|
|
131
128
|
'请确认以下各项:',
|
|
132
129
|
' 1 - 调用语法或参数是否正确',
|
|
133
130
|
' 2 - 当前环境是否开通了邮箱登录',
|
|
134
|
-
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}
|
|
135
|
-
]
|
|
131
|
+
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,
|
|
132
|
+
],
|
|
136
133
|
})
|
|
137
134
|
public async activate(token: string) {
|
|
138
135
|
return this._request.send('auth.activateEndUserMail', {
|
|
139
|
-
token
|
|
136
|
+
token,
|
|
140
137
|
});
|
|
141
138
|
}
|
|
142
|
-
}
|
|
139
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable prefer-const */
|
|
1
2
|
import { constants, utils, helpers } from '@cloudbase/utilities';
|
|
2
3
|
import { ILoginState } from '@cloudbase/types/auth';
|
|
3
4
|
import { AuthProvider } from './base';
|
|
@@ -6,16 +7,15 @@ import { eventBus, EVENTS, LoginState } from '..';
|
|
|
6
7
|
|
|
7
8
|
const { throwError, isString, transformPhone } = utils;
|
|
8
9
|
const { ERRORS, COMMUNITY_SITE_URL } = constants;
|
|
9
|
-
const { catchErrorsDecorator
|
|
10
|
+
const { catchErrorsDecorator } = helpers;
|
|
10
11
|
|
|
11
12
|
export const SIGN_METHOD = {
|
|
12
13
|
SIGNIN: 'SIGNIN',
|
|
13
14
|
SIGNUP: 'SIGNUP',
|
|
14
|
-
FORCERESETPWD: 'FORCERESETPWD'
|
|
15
|
-
}
|
|
15
|
+
FORCERESETPWD: 'FORCERESETPWD',
|
|
16
|
+
};
|
|
16
17
|
|
|
17
18
|
export class PhoneAuthProvider extends AuthProvider {
|
|
18
|
-
@stopAuthLoginWithOAuth()
|
|
19
19
|
@catchErrorsDecorator({
|
|
20
20
|
title: '手机号登录失败',
|
|
21
21
|
messages: [
|
|
@@ -23,8 +23,8 @@ export class PhoneAuthProvider extends AuthProvider {
|
|
|
23
23
|
' 1 - 调用 auth().SmsAuthProvider() 的语法或参数是否正确',
|
|
24
24
|
' 2 - 当前环境是否开通了短信验证码登录',
|
|
25
25
|
' 3 - 短信验证码/密码是否正确',
|
|
26
|
-
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}
|
|
27
|
-
]
|
|
26
|
+
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,
|
|
27
|
+
],
|
|
28
28
|
})
|
|
29
29
|
public async signIn(param: {
|
|
30
30
|
phoneNumber: string
|
|
@@ -32,7 +32,7 @@ export class PhoneAuthProvider extends AuthProvider {
|
|
|
32
32
|
password?: string
|
|
33
33
|
signMethod?: string
|
|
34
34
|
}): Promise<ILoginState> {
|
|
35
|
-
let { phoneNumber, phoneCode, password, signMethod } = param
|
|
35
|
+
let { phoneNumber, phoneCode, password, signMethod } = param;
|
|
36
36
|
if (!isString(phoneNumber)) {
|
|
37
37
|
throwError(ERRORS.INVALID_PARAMS, 'phoneNumber must be a string');
|
|
38
38
|
}
|
|
@@ -42,7 +42,7 @@ export class PhoneAuthProvider extends AuthProvider {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
if (!signMethod) {
|
|
45
|
-
signMethod = SIGN_METHOD.SIGNIN
|
|
45
|
+
signMethod = SIGN_METHOD.SIGNIN;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
const { refreshTokenKey } = this._cache.keys;
|
|
@@ -52,7 +52,7 @@ export class PhoneAuthProvider extends AuthProvider {
|
|
|
52
52
|
phoneCode,
|
|
53
53
|
password,
|
|
54
54
|
refresh_token: this._cache.getStore(refreshTokenKey) || '',
|
|
55
|
-
signMethod
|
|
55
|
+
signMethod,
|
|
56
56
|
});
|
|
57
57
|
const { refresh_token, access_token, access_token_expire } = res;
|
|
58
58
|
if (refresh_token) {
|
|
@@ -68,17 +68,17 @@ export class PhoneAuthProvider extends AuthProvider {
|
|
|
68
68
|
eventBus.fire(EVENTS.LOGIN_TYPE_CHANGED, {
|
|
69
69
|
env: this._config.env,
|
|
70
70
|
loginType: LOGINTYPE.PHONE,
|
|
71
|
-
persistence: this._config.persistence
|
|
71
|
+
persistence: this._config.persistence,
|
|
72
72
|
});
|
|
73
73
|
return new LoginState({
|
|
74
74
|
envId: this._config.env,
|
|
75
75
|
cache: this._cache,
|
|
76
|
-
request: this._request
|
|
76
|
+
request: this._request,
|
|
77
77
|
});
|
|
78
|
-
}
|
|
78
|
+
} if (res.code) {
|
|
79
79
|
throwError(ERRORS.OPERATION_FAIL, `Phone login fail[${res.code}] ${res.message}`);
|
|
80
80
|
} else {
|
|
81
|
-
throwError(ERRORS.OPERATION_FAIL,
|
|
81
|
+
throwError(ERRORS.OPERATION_FAIL, 'Phone login fail');
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
@@ -87,23 +87,22 @@ export class PhoneAuthProvider extends AuthProvider {
|
|
|
87
87
|
* @param phoneCode
|
|
88
88
|
* @param password
|
|
89
89
|
*/
|
|
90
|
-
@stopAuthLoginWithOAuth()
|
|
91
90
|
@catchErrorsDecorator({
|
|
92
91
|
title: '手机短信注册失败',
|
|
93
92
|
messages: [
|
|
94
93
|
'请确认以下各项:',
|
|
95
94
|
' 1 - 调用 auth().signUpWithPhoneCode() 的语法或参数是否正确',
|
|
96
95
|
' 2 - 当前环境是否开通了短信验证码登录',
|
|
97
|
-
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}
|
|
98
|
-
]
|
|
96
|
+
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,
|
|
97
|
+
],
|
|
99
98
|
})
|
|
100
99
|
public async signUp(phoneNumber: string, phoneCode: string, password?: string): Promise<ILoginState> {
|
|
101
100
|
return this.signIn({
|
|
102
101
|
phoneNumber,
|
|
103
102
|
phoneCode,
|
|
104
103
|
password,
|
|
105
|
-
signMethod: SIGN_METHOD.SIGNUP
|
|
106
|
-
})
|
|
104
|
+
signMethod: SIGN_METHOD.SIGNUP,
|
|
105
|
+
});
|
|
107
106
|
}
|
|
108
107
|
|
|
109
108
|
/**
|
|
@@ -118,15 +117,15 @@ export class PhoneAuthProvider extends AuthProvider {
|
|
|
118
117
|
'请确认以下各项:',
|
|
119
118
|
' 1 - 调用 auth().forceResetPwd() 的语法或参数是否正确',
|
|
120
119
|
' 2 - 当前环境是否开通了短信验证码登录',
|
|
121
|
-
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}
|
|
122
|
-
]
|
|
120
|
+
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,
|
|
121
|
+
],
|
|
123
122
|
})
|
|
124
123
|
public async forceResetPwd(phoneNumber: string, phoneCode: string, password: string): Promise<ILoginState> {
|
|
125
124
|
return this.signIn({
|
|
126
125
|
phoneNumber,
|
|
127
126
|
phoneCode,
|
|
128
127
|
password,
|
|
129
|
-
signMethod: SIGN_METHOD.FORCERESETPWD
|
|
130
|
-
})
|
|
128
|
+
signMethod: SIGN_METHOD.FORCERESETPWD,
|
|
129
|
+
});
|
|
131
130
|
}
|
|
132
|
-
}
|
|
131
|
+
}
|
|
@@ -6,10 +6,9 @@ import { utils, constants, helpers } from '@cloudbase/utilities';
|
|
|
6
6
|
|
|
7
7
|
const { printWarn } = utils;
|
|
8
8
|
const { ERRORS, COMMUNITY_SITE_URL } = constants;
|
|
9
|
-
const { catchErrorsDecorator
|
|
9
|
+
const { catchErrorsDecorator } = helpers;
|
|
10
10
|
|
|
11
11
|
export class UsernameAuthProvider extends AuthProvider {
|
|
12
|
-
@stopAuthLoginWithOAuth()
|
|
13
12
|
@catchErrorsDecorator({
|
|
14
13
|
title: '用户名密码登录失败',
|
|
15
14
|
messages: [
|
|
@@ -17,14 +16,14 @@ export class UsernameAuthProvider extends AuthProvider {
|
|
|
17
16
|
' 1 - 调用 auth().signInWithUsernameAndPassword() 的语法或参数是否正确',
|
|
18
17
|
' 2 - 当前环境是否开通了用户名密码登录',
|
|
19
18
|
' 3 - 用户名密码是否匹配',
|
|
20
|
-
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}
|
|
21
|
-
]
|
|
19
|
+
`如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,
|
|
20
|
+
],
|
|
22
21
|
})
|
|
23
22
|
public async signIn(username: string, password: string): Promise<ILoginState> {
|
|
24
23
|
if (typeof username !== 'string') {
|
|
25
24
|
throw new Error(JSON.stringify({
|
|
26
25
|
code: ERRORS.INVALID_PARAMS,
|
|
27
|
-
msg: 'username must be a string'
|
|
26
|
+
msg: 'username must be a string',
|
|
28
27
|
}));
|
|
29
28
|
}
|
|
30
29
|
// 用户不设置密码
|
|
@@ -38,7 +37,7 @@ export class UsernameAuthProvider extends AuthProvider {
|
|
|
38
37
|
loginType: LOGINTYPE.USERNAME,
|
|
39
38
|
username,
|
|
40
39
|
password,
|
|
41
|
-
refresh_token: await this._cache.getStoreAsync(refreshTokenKey) || ''
|
|
40
|
+
refresh_token: await this._cache.getStoreAsync(refreshTokenKey) || '',
|
|
42
41
|
});
|
|
43
42
|
|
|
44
43
|
const { refresh_token, access_token_expire, access_token } = res;
|
|
@@ -55,22 +54,22 @@ export class UsernameAuthProvider extends AuthProvider {
|
|
|
55
54
|
eventBus.fire(EVENTS.LOGIN_TYPE_CHANGED, {
|
|
56
55
|
env: this._config.env,
|
|
57
56
|
loginType: LOGINTYPE.USERNAME,
|
|
58
|
-
persistence: this._config.persistence
|
|
57
|
+
persistence: this._config.persistence,
|
|
59
58
|
});
|
|
60
59
|
return new LoginState({
|
|
61
60
|
envId: this._config.env,
|
|
62
61
|
cache: this._cache,
|
|
63
|
-
request: this._request
|
|
62
|
+
request: this._request,
|
|
64
63
|
});
|
|
65
|
-
}
|
|
64
|
+
} if (res.code) {
|
|
66
65
|
throw new Error(JSON.stringify({
|
|
67
66
|
code: ERRORS.OPERATION_FAIL,
|
|
68
|
-
msg: `login by username failed:[${res.code}] ${res.message}
|
|
67
|
+
msg: `login by username failed:[${res.code}] ${res.message}`,
|
|
69
68
|
}));
|
|
70
69
|
} else {
|
|
71
70
|
throw new Error(JSON.stringify({
|
|
72
71
|
code: ERRORS.OPERATION_FAIL,
|
|
73
|
-
msg: 'login by username failed'
|
|
72
|
+
msg: 'login by username failed',
|
|
74
73
|
}));
|
|
75
74
|
}
|
|
76
75
|
}
|