Skip to content

Commit

Permalink
Expose MetaData containing account creation and last sign-in timest…
Browse files Browse the repository at this point in the history
…amp.
  • Loading branch information
sam0829 committed Mar 1, 2020
1 parent eafec9f commit b978362
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 3 deletions.
13 changes: 11 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,18 @@ Field | Description |
phoneNumber | Phone number of user |
photoUri | URI of user's photo |
providerId | Indicates through which provider user was authenticated. |
isNewUser | Indicates if user is new |
metaData | Object of MetaData |

`MetaData`

Please note that above details may be null depending on the provider user used to sign and user's privacy settings on respective provider.
Field | Description |
--- | --- |
creationTimestamp | Timestamp of user's creation |
lastSignInTimestamp | Timestamp of user's last sign in |

**Notes:**
- Above details may be null depending on the provider user used to sign and user's privacy settings on respective provider.
- creationTimestamp seems to return wrong value sometimes on Android.

If you want to have full `FirebaseUser` object then please add [firebase_auth](https://pub.dev/packages/firebase_auth) dependency. You can then use `FirebaseAuth.instance.currentUser()`.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,14 @@ class FirebaseAuthUiPlugin(private val activity: Activity) : MethodCallHandler,
userMap["is_anonymous"] = user.isAnonymous
userMap["is_new_user"] = response?.isNewUser ?: false

// MetaData
val metadataMap = hashMapOf<String, Any>()
user.metadata?.let { metadata ->
metadataMap["creation_timestamp"] = metadata.creationTimestamp
metadataMap["last_sign_in_timestamp"] = metadata.lastSignInTimestamp
}
userMap["metadata"] = metadataMap

result?.success(userMap)
} else {
result?.error(ERROR_UNKNOWN, "Unknown error occurred.", null)
Expand Down
18 changes: 18 additions & 0 deletions ios/Classes/SwiftFirebaseAuthUiPlugin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,23 @@ public class SwiftFirebaseAuthUiPlugin: NSObject, FlutterPlugin, FUIAuthDelegate
details: nil))
}
} else {
var createdTimeStamp = Int(user?.metadata.creationDate?.timeIntervalSince1970 ?? -1)
var lastSignInTimeStamp = Int(user?.metadata.lastSignInDate?.timeIntervalSince1970 ?? -1)

if createdTimeStamp != -1 {
// convert to milliseconds to match with Android
createdTimeStamp *= 1000
}

if lastSignInTimeStamp != -1 {
// convert to milliseconds to match with Android
lastSignInTimeStamp *= 1000
}

let metaDataDictionary: NSMutableDictionary = [
"creation_timestamp": createdTimeStamp,
"last_sign_in_timestamp": lastSignInTimeStamp,
]
let userDisctionary : NSMutableDictionary = [
"display_name": user?.displayName ?? "",
"email": user?.email ?? "",
Expand All @@ -98,6 +115,7 @@ public class SwiftFirebaseAuthUiPlugin: NSObject, FlutterPlugin, FUIAuthDelegate
"phone_number": user?.phoneNumber ?? "",
"is_anonymous": user?.isAnonymous ?? false,
"is_new_user": authDataResult?.additionalUserInfo?.isNewUser ?? false,
"metadata": metaDataDictionary,
]
result?(userDisctionary)
}
Expand Down
6 changes: 6 additions & 0 deletions lib/src/firebase_auth_ui/firebase_auth_ui.dart
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,19 @@ class FirebaseAuthUi {
}

FirebaseUser _getFirebaseUser(Map<dynamic, dynamic> userMap) {
MetaData metaData;
if (userMap?.containsKey("metadata") ?? false) {
metaData = MetaData(creationTimestamp: userMap["metadata"]["creation_timestamp"],
lastSignInTimestamp: userMap["metadata"]["last_sign_in_timestamp"]);
}
return FirebaseUser(
userMap["uid"] ?? "",
userMap["display_name"] ?? "",
userMap["email"] ?? "",
userMap["phone_number"] ?? "",
userMap["photo_url"] ?? "",
userMap["provider_id"] ?? "",
metaData,
isAnonymous: userMap["is_anonymous"] ?? false,
isNewUser: userMap["is_new_user"]);
}
Expand Down
21 changes: 20 additions & 1 deletion lib/src/firebase_auth_ui/firebase_user.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ class FirebaseUser {
String providerId;
bool isAnonymous;
bool isNewUser;
MetaData metaData;

FirebaseUser(this.uid, this.displayName, this.email, this.phoneNumber,
this.photoUri, this.providerId,
this.photoUri, this.providerId, this.metaData,
{this.isAnonymous = false, this.isNewUser});

Map<String, dynamic> toJSON() {
Expand All @@ -22,6 +23,24 @@ class FirebaseUser {
"providerId": providerId,
"isAnonymous": isAnonymous,
"isNewUser": isNewUser,
"metaData": metaData.toJSON(),
};
}
}

class MetaData {
int creationTimestamp;
int lastSignInTimestamp;

MetaData({
this.creationTimestamp,
this.lastSignInTimestamp,
});

Map<String, dynamic> toJSON() {
return {
"creationTimestamp": creationTimestamp,
"lastSignInTimestamp": lastSignInTimestamp
};
}
}

0 comments on commit b978362

Please sign in to comment.