From 0793a36e2ae125aa58e59fd01f1cf9f7cf80604a Mon Sep 17 00:00:00 2001 From: parsy_a Date: Tue, 11 Sep 2018 22:25:41 +0200 Subject: [PATCH 1/3] [Firebase Auth] added access to User metadata allows to recover the account creation date, and the last sign in date of an user. With them, you can determine if a user logs in for the first time. (and then, create a welcome/ setup page, for example) --- .../plugins/firebaseauth/FirebaseAuthPlugin.java | 2 ++ .../firebase_auth/ios/Classes/FirebaseAuthPlugin.m | 6 ++++++ packages/firebase_auth/lib/firebase_auth.dart | 14 ++++++++++++++ 3 files changed, 22 insertions(+) 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 5eccd3c5efdf..dd932794a139 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 @@ -614,6 +614,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 ca6edcc8e62e..5bdf4b929992 100644 --- a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m +++ b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m @@ -291,7 +291,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 7020bdefe7f1..c5733a3bc670 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) => 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. From dad5342a7cd896efcc882535ace4e96225755804 Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Tue, 2 Oct 2018 18:03:37 -0700 Subject: [PATCH 2/3] bump version since adding new feature --- packages/firebase_auth/CHANGELOG.md | 4 ++++ packages/firebase_auth/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/firebase_auth/CHANGELOG.md b/packages/firebase_auth/CHANGELOG.md index 74495aef68ee..dd93f7492389 100644 --- a/packages/firebase_auth/CHANGELOG.md +++ b/packages/firebase_auth/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.2 + +* Add access to user metadata. + ## 0.6.1 * Adding support for linkWithTwitterCredential in FirebaseAuth. diff --git a/packages/firebase_auth/pubspec.yaml b/packages/firebase_auth/pubspec.yaml index 72388180fc62..1d443b4abc44 100755 --- a/packages/firebase_auth/pubspec.yaml +++ b/packages/firebase_auth/pubspec.yaml @@ -4,7 +4,7 @@ description: Flutter plugin for Firebase Auth, enabling Android and iOS like Google, Facebook and Twitter. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_auth -version: 0.6.0 +version: 0.6.2 flutter: plugin: From 8855c864968f56d2d8a3b47f0317f3243dcf8745 Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Tue, 2 Oct 2018 18:10:02 -0700 Subject: [PATCH 3/3] removed unnecessary new keyword --- packages/firebase_auth/lib/firebase_auth.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firebase_auth/lib/firebase_auth.dart b/packages/firebase_auth/lib/firebase_auth.dart index c5733a3bc670..873b8ce3d8f9 100755 --- a/packages/firebase_auth/lib/firebase_auth.dart +++ b/packages/firebase_auth/lib/firebase_auth.dart @@ -73,7 +73,7 @@ class FirebaseUser extends UserInfo { : providerData = data['providerData'] .map((dynamic item) => UserInfo._(item)) .toList(), - _metadata = new FirebaseUserMetadata._(data), + _metadata = FirebaseUserMetadata._(data), super._(data); // Returns true if the user is anonymous; that is, the user account was