Skip to content

Commit 5969fdd

Browse files
feat: add support for additional user fields in passkey signup
1 parent 72f1acd commit 5969fdd

12 files changed

Lines changed: 105 additions & 5 deletions

File tree

A0Auth0.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Pod::Spec.new do |s|
1616
s.source_files = 'ios/**/*.{h,m,mm,swift}'
1717
s.requires_arc = true
1818

19-
s.dependency 'Auth0', '2.19.0'
19+
s.dependency 'Auth0', '2.20.0'
2020

2121
install_modules_dependencies(s)
2222
end

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ dependencies {
9696
implementation "com.facebook.react:react-android"
9797
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
9898
implementation "androidx.browser:browser:1.2.0"
99-
implementation 'com.auth0.android:auth0:3.15.0'
99+
implementation 'com.auth0.android:auth0:3.17.0'
100100
}
101101

102102
if (isNewArchitectureEnabled()) {

android/src/main/java/com/auth0/react/A0Auth0Module.kt

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,11 @@ class A0Auth0Module(private val reactContext: ReactApplicationContext) : A0Auth0
563563
phoneNumber: String?,
564564
username: String?,
565565
name: String?,
566+
givenName: String?,
567+
familyName: String?,
568+
nickname: String?,
569+
picture: String?,
570+
userMetadata: ReadableMap?,
566571
realm: String?,
567572
audience: String?,
568573
scope: String?,
@@ -579,10 +584,25 @@ class A0Auth0Module(private val reactContext: ReactApplicationContext) : A0Auth0
579584
val finalPhone = phoneNumber?.trim()?.ifEmpty { null }
580585
val finalUsername = username?.trim()?.ifEmpty { null }
581586
val finalName = name?.trim()?.ifEmpty { null }
587+
val finalGivenName = givenName?.trim()?.ifEmpty { null }
588+
val finalFamilyName = familyName?.trim()?.ifEmpty { null }
589+
val finalNickname = nickname?.trim()?.ifEmpty { null }
590+
val finalPicture = picture?.trim()?.ifEmpty { null }
591+
val finalUserMetadata = userMetadata?.toHashMap()?.mapValues { it.value?.toString() ?: "" }?.ifEmpty { null }
582592
val finalRealm = realm?.trim()?.ifEmpty { null }
583593
val finalAudience = audience?.trim()?.ifEmpty { null }
584594
val finalOrg = organization?.trim()?.ifEmpty { null }
585-
val userData = UserData(email = finalEmail, phoneNumber = finalPhone, userName = finalUsername, name = finalName)
595+
val userData = UserData(
596+
email = finalEmail,
597+
phoneNumber = finalPhone,
598+
userName = finalUsername,
599+
name = finalName,
600+
givenName = finalGivenName,
601+
familyName = finalFamilyName,
602+
nickName = finalNickname,
603+
picture = finalPicture,
604+
userMetadata = finalUserMetadata
605+
)
586606

587607
authClient.signupWithPasskey(userData, finalRealm, finalOrg)
588608
.start(object : com.auth0.android.callback.Callback<PasskeyRegistrationChallenge, AuthenticationException> {

android/src/main/oldarch/com/auth0/react/A0Auth0Spec.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ abstract class A0Auth0Spec(context: ReactApplicationContext) : ReactContextBaseJ
130130
phoneNumber: String?,
131131
username: String?,
132132
name: String?,
133+
givenName: String?,
134+
familyName: String?,
135+
nickname: String?,
136+
picture: String?,
137+
userMetadata: ReadableMap?,
133138
realm: String?,
134139
audience: String?,
135140
scope: String?,

ios/A0Auth0.mm

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,13 +184,18 @@ - (dispatch_queue_t)methodQueue
184184
phoneNumber:(NSString * _Nullable)phoneNumber
185185
username:(NSString * _Nullable)username
186186
name:(NSString * _Nullable)name
187+
givenName:(NSString * _Nullable)givenName
188+
familyName:(NSString * _Nullable)familyName
189+
nickname:(NSString * _Nullable)nickname
190+
picture:(NSString * _Nullable)picture
191+
userMetadata:(NSDictionary * _Nullable)userMetadata
187192
realm:(NSString * _Nullable)realm
188193
audience:(NSString * _Nullable)audience
189194
scope:(NSString * _Nullable)scope
190195
organization:(NSString * _Nullable)organization
191196
resolve:(RCTPromiseResolveBlock)resolve
192197
reject:(RCTPromiseRejectBlock)reject) {
193-
[self.nativeBridge signupWithPasskeyWithEmail:email phoneNumber:phoneNumber username:username name:name realm:realm audience:audience scope:scope organization:organization resolve:resolve reject:reject];
198+
[self.nativeBridge signupWithPasskeyWithEmail:email phoneNumber:phoneNumber username:username name:name givenName:givenName familyName:familyName nickname:nickname picture:picture userMetadata:userMetadata realm:realm audience:audience scope:scope organization:organization resolve:resolve reject:reject];
194199
}
195200

196201
RCT_EXPORT_METHOD(signinWithPasskey:(NSString * _Nullable)realm

ios/NativeBridge.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ public class NativeBridge: NSObject {
405405
}
406406
}
407407

408-
@objc public func signupWithPasskey(email: String?, phoneNumber: String?, username: String?, name: String?, realm: String?, audience: String?, scope: String?, organization: String?, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
408+
@objc public func signupWithPasskey(email: String?, phoneNumber: String?, username: String?, name: String?, givenName: String?, familyName: String?, nickname: String?, picture: String?, userMetadata: [String: String]?, realm: String?, audience: String?, scope: String?, organization: String?, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
409409
guard #available(iOS 16.6, *) else {
410410
reject("PASSKEY_NOT_AVAILABLE", "Passkeys require iOS 16.6 or later", nil)
411411
return
@@ -416,6 +416,11 @@ public class NativeBridge: NSObject {
416416
let phoneValue = phoneNumber?.isEmpty == true ? nil : phoneNumber
417417
let usernameValue = username?.isEmpty == true ? nil : username
418418
let nameValue = name?.isEmpty == true ? nil : name
419+
let givenNameValue = givenName?.isEmpty == true ? nil : givenName
420+
let familyNameValue = familyName?.isEmpty == true ? nil : familyName
421+
let nicknameValue = nickname?.isEmpty == true ? nil : nickname
422+
let pictureValue = picture?.isEmpty == true ? nil : picture
423+
let userMetadataValue = userMetadata?.isEmpty == true ? nil : userMetadata
419424
let realmValue = realm?.isEmpty == true ? nil : realm
420425
let audienceValue = audience?.isEmpty == true ? nil : audience
421426
let orgValue = organization?.isEmpty == true ? nil : organization
@@ -432,6 +437,11 @@ public class NativeBridge: NSObject {
432437
phoneNumber: phoneValue,
433438
username: usernameValue,
434439
name: nameValue,
440+
givenName: givenNameValue,
441+
familyName: familyNameValue,
442+
nickname: nicknameValue,
443+
picture: pictureValue,
444+
userMetadata: userMetadataValue,
435445
connection: realmValue,
436446
organization: orgValue
437447
).start { result in

src/platforms/native/adapters/NativeAuth0Client.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,11 @@ export class NativeAuth0Client implements IAuth0Client {
197197
phoneNumber,
198198
username,
199199
name,
200+
givenName,
201+
familyName,
202+
nickname,
203+
picture,
204+
userMetadata,
200205
realm,
201206
audience,
202207
scope,
@@ -208,6 +213,11 @@ export class NativeAuth0Client implements IAuth0Client {
208213
phoneNumber || undefined,
209214
username || undefined,
210215
name || undefined,
216+
givenName || undefined,
217+
familyName || undefined,
218+
nickname || undefined,
219+
picture || undefined,
220+
userMetadata || undefined,
211221
realm || undefined,
212222
audience || undefined,
213223
scope || undefined,

src/platforms/native/adapters/__tests__/NativeAuth0Client.spec.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,11 @@ describe('NativeAuth0Client', () => {
303303
phoneNumber: '+1234567890',
304304
username: 'johndoe',
305305
name: 'John Doe',
306+
givenName: 'John',
307+
familyName: 'Doe',
308+
nickname: 'johnny',
309+
picture: 'https://example.com/photo.png',
310+
userMetadata: { signup_source: 'mobile_app' },
306311
realm: 'Username-Password-Authentication',
307312
audience: 'https://api.example.com',
308313
scope: 'openid profile email',
@@ -316,6 +321,11 @@ describe('NativeAuth0Client', () => {
316321
'+1234567890',
317322
'johndoe',
318323
'John Doe',
324+
'John',
325+
'Doe',
326+
'johnny',
327+
'https://example.com/photo.png',
328+
{ signup_source: 'mobile_app' },
319329
'Username-Password-Authentication',
320330
'https://api.example.com',
321331
'openid profile email',
@@ -342,6 +352,11 @@ describe('NativeAuth0Client', () => {
342352
undefined,
343353
undefined,
344354
undefined,
355+
undefined,
356+
undefined,
357+
undefined,
358+
undefined,
359+
undefined,
345360
'Username-Password-Authentication',
346361
undefined,
347362
undefined,

src/platforms/native/bridge/INativeBridge.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,11 @@ export interface INativeBridge {
216216
* @param phoneNumber The user's phone number.
217217
* @param username The user's username.
218218
* @param name The user's display name.
219+
* @param givenName The user's first name.
220+
* @param familyName The user's last name.
221+
* @param nickname The user's preferred nickname.
222+
* @param picture URL pointing to the user's profile picture.
223+
* @param userMetadata Additional user metadata as key-value pairs.
219224
* @param realm The database connection name.
220225
* @param audience Optional target API identifier.
221226
* @param scope Optional space-separated scopes.
@@ -227,6 +232,11 @@ export interface INativeBridge {
227232
phoneNumber?: string,
228233
username?: string,
229234
name?: string,
235+
givenName?: string,
236+
familyName?: string,
237+
nickname?: string,
238+
picture?: string,
239+
userMetadata?: Record<string, string>,
230240
realm?: string,
231241
audience?: string,
232242
scope?: string,

src/platforms/native/bridge/NativeBridgeManager.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,11 @@ export class NativeBridgeManager implements INativeBridge {
259259
phoneNumber?: string,
260260
username?: string,
261261
name?: string,
262+
givenName?: string,
263+
familyName?: string,
264+
nickname?: string,
265+
picture?: string,
266+
userMetadata?: Record<string, string>,
262267
realm?: string,
263268
audience?: string,
264269
scope?: string,
@@ -270,6 +275,11 @@ export class NativeBridgeManager implements INativeBridge {
270275
phoneNumber,
271276
username,
272277
name,
278+
givenName,
279+
familyName,
280+
nickname,
281+
picture,
282+
userMetadata,
273283
realm,
274284
audience,
275285
scope,

0 commit comments

Comments
 (0)