Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit f90181f

Browse files
committed
[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)
1 parent 99a2efa commit f90181f

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

packages/firebase_auth/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,8 @@ private ImmutableMap<String, Object> mapFromUser(FirebaseUser user) {
613613
}
614614
ImmutableMap<String, Object> userMap =
615615
userInfoToMap(user)
616+
.put("creationTimestamp", user.getMetadata().getCreationTimestamp())
617+
.put("lastSignInTimestamp", user.getMetadata().getLastSignInTimestamp())
616618
.put("isAnonymous", user.isAnonymous())
617619
.put("isEmailVerified", user.isEmailVerified())
618620
.put("providerData", providerDataBuilder.build())

packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,8 @@ - (NSMutableDictionary *)dictionaryFromUser:(FIRUser *)user {
276276
[providerData addObject:toDictionary(userInfo)];
277277
}
278278
NSMutableDictionary *userData = [toDictionary(user) mutableCopy];
279+
userData[@"creationTimestamp"] = user.metadata.creationDate;
280+
userData[@"lastSignInTimestamp"] = user.metadata.lastSignInDate;
279281
userData[@"isAnonymous"] = [NSNumber numberWithBool:user.isAnonymous];
280282
userData[@"isEmailVerified"] = [NSNumber numberWithBool:user.isEmailVerified];
281283
userData[@"providerData"] = providerData;

packages/firebase_auth/lib/firebase_auth.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ import 'package:flutter/services.dart';
88
import 'package:meta/meta.dart';
99

1010
/// Represents user data returned from an identity provider.
11+
12+
class FirebaseUserMetadata {
13+
final Map<dynamic, dynamic> _data;
14+
15+
FirebaseUserMetadata._(this._data);
16+
17+
int get creationTimestamp => _data['creationTimestamp'];
18+
int get lastSignInTimestamp => _data['lastSignInTimestamp'];
19+
}
20+
1121
class UserInfo {
1222
final Map<dynamic, dynamic> _data;
1323

@@ -57,16 +67,20 @@ class UserUpdateInfo {
5767
/// Represents a user.
5868
class FirebaseUser extends UserInfo {
5969
final List<UserInfo> providerData;
70+
final FirebaseUserMetadata _metadata;
6071

6172
FirebaseUser._(Map<dynamic, dynamic> data)
6273
: providerData = data['providerData']
6374
.map<UserInfo>((dynamic item) => new UserInfo._(item))
6475
.toList(),
76+
_metadata = new FirebaseUserMetadata._(data),
6577
super._(data);
6678

6779
// Returns true if the user is anonymous; that is, the user account was
6880
// created with signInAnonymously() and has not been linked to another
6981
// account.
82+
FirebaseUserMetadata get metadata => _metadata;
83+
7084
bool get isAnonymous => _data['isAnonymous'];
7185

7286
/// Returns true if the user's email is verified.

0 commit comments

Comments
 (0)