Skip to content

Commit

Permalink
Fix email verified type (#309)
Browse files Browse the repository at this point in the history
Co-authored-by: Rita Zerrizuela <[email protected]>
  • Loading branch information
itome and Widcket authored Nov 1, 2023
1 parent b7c5a60 commit 9a1e531
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ extension UserProfileExtension on UserProfile {
final updatedAt = claims[PublicClaims.updatedAt] != null
? DateTime.parse(claims[PublicClaims.updatedAt] as String)
: null;
final isEmailVerified = claims[PublicClaims.emailVerified] != null
? claims[PublicClaims.emailVerified] is bool
? claims[PublicClaims.emailVerified] as bool
: claims[PublicClaims.emailVerified] == 'true'
: null;

return UserProfile(
sub: claims[PublicClaims.sub] as String,
Expand All @@ -41,7 +46,7 @@ extension UserProfileExtension on UserProfile {
pictureUrl: pictureUrl,
websiteUrl: websiteUrl,
email: claims[PublicClaims.email] as String?,
isEmailVerified: claims[PublicClaims.emailVerified] as bool?,
isEmailVerified: isEmailVerified,
gender: claims[PublicClaims.gender] as String?,
birthdate: claims[PublicClaims.birthdate] as String?,
zoneinfo: claims[PublicClaims.zoneinfo] as String?,
Expand Down
58 changes: 58 additions & 0 deletions auth0_flutter/test/web/extensions/user_profile_extension_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,64 @@ void main() {
expect(result.customClaims, customClaims);
});

test('creates UserProfile from claims with stringified email_verified',
() async {
const Map<String, dynamic> claims = {
...requiredValues,
PublicClaims.name: 'John Alexander Doe',
PublicClaims.givenName: 'John',
PublicClaims.familyName: 'Doe',
PublicClaims.middleName: 'Alexander',
PublicClaims.nickname: 'johnny',
PublicClaims.preferredUsername: 'johnnyD',
PublicClaims.profile: 'https://example.com/profile',
PublicClaims.picture: 'https://example.com/picture.png',
PublicClaims.website: 'https://example.com',
PublicClaims.email: '[email protected]',
PublicClaims.emailVerified: 'true',
PublicClaims.gender: 'male',
PublicClaims.birthdate: '01-01-2000',
PublicClaims.zoneinfo: 'America/Chicago',
PublicClaims.locale: 'en-US',
PublicClaims.phoneNumber: '111111111',
PublicClaims.phoneNumberVerified: true,
PublicClaims.address: {'street': '1 Foo St', 'zip_code': '11111-1111'},
PublicClaims.updatedAt: '2023-02-28T15:08:56+00:00',
'foo': 'bar'
};

final result = UserProfileExtension.fromClaims(claims);

expect(result.name, claims[PublicClaims.name]);
expect(result.givenName, claims[PublicClaims.givenName]);
expect(result.familyName, claims[PublicClaims.familyName]);
expect(result.middleName, claims[PublicClaims.middleName]);
expect(result.nickname, claims[PublicClaims.nickname]);
expect(result.preferredUsername, claims[PublicClaims.preferredUsername]);
expect(
result.profileUrl, Uri.parse(claims[PublicClaims.profile] as String));
expect(
result.pictureUrl, Uri.parse(claims[PublicClaims.picture] as String));
expect(
result.websiteUrl, Uri.parse(claims[PublicClaims.website] as String));
expect(result.email, claims[PublicClaims.email]);
expect(
result.isEmailVerified,
claims[PublicClaims.emailVerified] == 'true',
);
expect(result.gender, claims[PublicClaims.gender]);
expect(result.birthdate, claims[PublicClaims.birthdate]);
expect(result.zoneinfo, claims[PublicClaims.zoneinfo]);
expect(result.locale, claims[PublicClaims.locale]);
expect(result.phoneNumber, claims[PublicClaims.phoneNumber]);
expect(result.isPhoneNumberVerified,
claims[PublicClaims.phoneNumberVerified]);
expect(result.address, claims[PublicClaims.address]);
expect(result.updatedAt,
DateTime.parse(claims[PublicClaims.updatedAt] as String));
expect(result.customClaims?['foo'], claims['foo']);
});

test('throws exception with invalid profile URL', () async {
const Map<String, dynamic> claims = {
...requiredValues,
Expand Down

0 comments on commit 9a1e531

Please sign in to comment.