diff --git a/packages/firebase_auth/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java b/packages/firebase_auth/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java index 87f5c552f1f8..07ecb8330d05 100755 --- a/packages/firebase_auth/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java +++ b/packages/firebase_auth/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java @@ -610,6 +610,8 @@ private Map mapFromUser(FirebaseUser user) { providerData.add(Collections.unmodifiableMap(userInfoToMap(userInfo))); } Map userMap = userInfoToMap(user); + userMap.put("creationTimestamp", user.getMetadata().getCreationTimestamp()); + userMap.put("lastSignInTimestamp", user.getMetadata().getLastSignInTimestamp()); userMap.put("isAnonymous", user.isAnonymous()); userMap.put("isEmailVerified", user.isEmailVerified()); userMap.put("providerData", Collections.unmodifiableList(providerData)); diff --git a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m index a1452990d08f..5bd6b394f5c1 100644 --- a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m +++ b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m @@ -275,7 +275,13 @@ - (NSMutableDictionary *)dictionaryFromUser:(FIRUser *)user { for (id userInfo in user.providerData) { [providerData addObject:toDictionary(userInfo)]; } + + long creationDate = [user.metadata.creationDate timeIntervalSince1970]; + long lastSignInDate = [user.metadata.lastSignInDate timeIntervalSince1970]; + NSMutableDictionary *userData = [toDictionary(user) mutableCopy]; + userData[@"creationTimestamp"] = [NSNumber numberWithLong:creationDate]; + userData[@"lastSignInTimestamp"] = [NSNumber numberWithInt:lastSignInDate]; userData[@"isAnonymous"] = [NSNumber numberWithBool:user.isAnonymous]; userData[@"isEmailVerified"] = [NSNumber numberWithBool:user.isEmailVerified]; userData[@"providerData"] = providerData; diff --git a/packages/firebase_auth/lib/firebase_auth.dart b/packages/firebase_auth/lib/firebase_auth.dart index 5574bc5ee1b9..8def933406ab 100755 --- a/packages/firebase_auth/lib/firebase_auth.dart +++ b/packages/firebase_auth/lib/firebase_auth.dart @@ -8,6 +8,16 @@ import 'package:flutter/services.dart'; import 'package:meta/meta.dart'; /// Represents user data returned from an identity provider. + +class FirebaseUserMetadata { + final Map _data; + + FirebaseUserMetadata._(this._data); + + int get creationTimestamp => _data['creationTimestamp']; + int get lastSignInTimestamp => _data['lastSignInTimestamp']; +} + class UserInfo { final Map _data; @@ -57,16 +67,20 @@ class UserUpdateInfo { /// Represents a user. class FirebaseUser extends UserInfo { final List providerData; + final FirebaseUserMetadata _metadata; FirebaseUser._(Map data) : providerData = data['providerData'] .map((dynamic item) => new UserInfo._(item)) .toList(), + _metadata = new FirebaseUserMetadata._(data), super._(data); // Returns true if the user is anonymous; that is, the user account was // created with signInAnonymously() and has not been linked to another // account. + FirebaseUserMetadata get metadata => _metadata; + bool get isAnonymous => _data['isAnonymous']; /// Returns true if the user's email is verified.