Skip to content

Commit ad9496c

Browse files
Merge pull request #187 from Authing/feat-loginByCodeAndPhone
feat: login by code and phone
2 parents 0e24715 + a1a2a72 commit ad9496c

File tree

9 files changed

+112
-24
lines changed

9 files changed

+112
-24
lines changed

examples/miniapp-wx/miniapp/miniprogram_npm/@authing/miniapp-jsencrypt/index.js

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/miniapp-wx/miniapp/miniprogram_npm/@authing/miniapp-sm2encrypt/index.js

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/miniapp-wx/miniapp/miniprogram_npm/@authing/miniapp-wx/index.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/miniapp-wx/miniapp/miniprogram_npm/@authing/miniapp-wx/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/miniapp-wx/miniapp/miniprogram_npm/jsbn/index.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/miniapp-wx/miniapp/pages/index/index.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import { Authing } from '@authing/miniapp-wx'
77
import { encryptFunction } from '@authing/miniapp-sm2encrypt'
88

99
const authing = new Authing({
10-
appId: '630ed3137dd6f2fd7001da24',
11-
host: 'https://test-auth-zhaoyiming.authing.cn',
12-
userPoolId: '62e221f85f5ac5cc47037a39',
10+
appId: '63b4718d86ef2f8dd654c153',
11+
host: 'https://core.authing.me',
12+
userPoolId: '59f86b4832eb28071bdd9214',
1313
encryptFunction
1414
})
1515

@@ -66,6 +66,22 @@ Page({
6666
console.log('authing.loginByPassword res: ', res)
6767
},
6868

69+
async loginByCodeAndPhone (e) {
70+
const { code } = e.detail
71+
72+
authing.loginByCodeAndPhone({
73+
extIdpConnidentifier: 'root-wx-miniapp-scan-login',
74+
wechatMiniProgramCodeAndPhonePayload: {
75+
wxPhoneInfo: {
76+
code
77+
}
78+
},
79+
options: {
80+
scope: 'openid profile offline_access'
81+
}
82+
})
83+
},
84+
6985
async sendSms () {
7086
// 指定 channel 为 CHANNEL_LOGIN,发送登录所用的验证码
7187
const res = await authing.sendSms({

examples/miniapp-wx/miniapp/pages/index/index.wxml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<button bindtap="loginByPhone">loginByPhone</button>
33
<button open-type="getPhoneNumber" bindgetphonenumber="getPhone">getPhone</button>
44
<button bindtap="loginByPassword">loginByPassword</button>
5+
<button open-type="getPhoneNumber" bindgetphonenumber="loginByCodeAndPhone">loginByCodeAndPhone</button>
56

67
<!-- 发送手机短信验证码 -->
78
<button bindtap="sendSms">sendSms</button>

packages/miniapp/src/Authing.ts

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ import {
1818
LoginByCodeOptions,
1919
SDKResponse,
2020
UpdateUserInfo,
21-
SimpleResponseData
21+
SimpleResponseData,
22+
WxCodeAndPhoneLoginOptions,
23+
LoginByCodeAndPhoneOptions
2224
} from './types'
2325

2426
import { returnSuccess, returnError } from './helpers/return'
@@ -272,6 +274,43 @@ export class Authing {
272274
return await this.login(_data, 'passCode')
273275
}
274276

277+
/**
278+
* 仅限 Authing Cloud 小程序使用
279+
*/
280+
async loginByCodeAndPhone (data: LoginByCodeAndPhoneOptions): Promise<SDKResponse<LoginState>> {
281+
const [, loginState] = await this.getLoginState()
282+
283+
if (loginState && loginState.expires_at > Date.now()) {
284+
return returnSuccess(loginState)
285+
}
286+
287+
const { extIdpConnidentifier, wechatMiniProgramCodeAndPhonePayload, options } = data
288+
289+
const code = await this.resetWxLoginCode()
290+
291+
if (!code) {
292+
return returnError({
293+
message: 'get wx login code error'
294+
})
295+
}
296+
297+
const _data: WxCodeAndPhoneLoginOptions = {
298+
connection: 'wechat_mini_program_code_and_phone',
299+
extIdpConnidentifier,
300+
wechatMiniProgramCodeAndPhonePayload: {
301+
wxPhoneInfo: wechatMiniProgramCodeAndPhonePayload.wxPhoneInfo,
302+
wxLoginInfo: {
303+
encryptedData: wechatMiniProgramCodeAndPhonePayload?.wxLoginInfo?.encryptedData || '',
304+
iv: wechatMiniProgramCodeAndPhonePayload?.wxLoginInfo?.iv || '',
305+
code
306+
}
307+
},
308+
options
309+
}
310+
311+
return await this.login(_data, 'codeAndPhone')
312+
}
313+
275314
async logout(): Promise<SDKResponse<boolean>> {
276315
const [loginStateError, loginState] = await this.getLoginState()
277316

@@ -332,12 +371,14 @@ export class Authing {
332371
| WxCodeLoginOptions
333372
| WxPhoneLoginOptions
334373
| PasswordLoginOptions
335-
| PassCodeLoginOptions,
374+
| PassCodeLoginOptions
375+
| WxCodeAndPhoneLoginOptions,
336376
type: string
337377
): Promise<SDKResponse<LoginState>> {
338378
const urlMap: Record<string, string> = {
339379
code: '/api/v3/signin-by-mobile',
340380
phone: '/api/v3/signin-by-mobile',
381+
codeAndPhone: '/api/v3/signin-by-mobile',
341382
password: '/api/v3/signin',
342383
passCode: '/api/v3/signin'
343384
}

packages/miniapp/src/types.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,36 @@ export interface WxPhoneLoginOptions {
9494
options?: LoginOptions
9595
}
9696

97+
export interface LoginByCodeAndPhoneOptions {
98+
extIdpConnidentifier: string
99+
wechatMiniProgramCodeAndPhonePayload: {
100+
wxLoginInfo?: {
101+
encryptedData?: string
102+
iv?: string
103+
},
104+
wxPhoneInfo: {
105+
code: string
106+
}
107+
}
108+
options?: LoginOptions
109+
}
110+
111+
export interface WxCodeAndPhoneLoginOptions {
112+
connection: 'wechat_mini_program_code_and_phone'
113+
extIdpConnidentifier: string
114+
wechatMiniProgramCodeAndPhonePayload: {
115+
wxLoginInfo: {
116+
encryptedData: string
117+
iv: string
118+
code: string
119+
}
120+
wxPhoneInfo: {
121+
code: string
122+
}
123+
}
124+
options?: LoginOptions
125+
}
126+
97127
export interface PasswordLoginOptions {
98128
connection?: 'PASSWORD'
99129
passwordPayload: {

0 commit comments

Comments
 (0)