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

Commit 11ad2d8

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 8178bf1 commit 11ad2d8

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-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
@@ -610,6 +610,8 @@ private Map<String, Object> mapFromUser(FirebaseUser user) {
610610
providerData.add(Collections.unmodifiableMap(userInfoToMap(userInfo)));
611611
}
612612
Map<String, Object> userMap = userInfoToMap(user);
613+
userMap.put("creationTimestamp", user.getMetadata().getCreationTimestamp());
614+
userMap.put("lastSignInTimestamp", user.getMetadata().getLastSignInTimestamp());
613615
userMap.put("isAnonymous", user.isAnonymous());
614616
userMap.put("isEmailVerified", user.isEmailVerified());
615617
userMap.put("providerData", Collections.unmodifiableList(providerData));

packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,13 @@ - (NSMutableDictionary *)dictionaryFromUser:(FIRUser *)user {
275275
for (id<FIRUserInfo> userInfo in user.providerData) {
276276
[providerData addObject:toDictionary(userInfo)];
277277
}
278+
279+
long creationDate = [user.metadata.creationDate timeIntervalSince1970];
280+
long lastSignInDate = [user.metadata.lastSignInDate timeIntervalSince1970];
281+
278282
NSMutableDictionary *userData = [toDictionary(user) mutableCopy];
283+
userData[@"creationTimestamp"] = [NSNumber numberWithLong:creationDate];
284+
userData[@"lastSignInTimestamp"] = [NSNumber numberWithInt:lastSignInDate];
279285
userData[@"isAnonymous"] = [NSNumber numberWithBool:user.isAnonymous];
280286
userData[@"isEmailVerified"] = [NSNumber numberWithBool:user.isEmailVerified];
281287
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)