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

Commit

Permalink
[Firebase Auth] added access to User metadata
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
LucasParsy committed Sep 11, 2018
1 parent 8178bf1 commit cd17003
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,8 @@ private Map<String, Object> mapFromUser(FirebaseUser user) {
providerData.add(Collections.unmodifiableMap(userInfoToMap(userInfo)));
}
Map<String, Object> 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));
Expand Down
6 changes: 6 additions & 0 deletions packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,13 @@ - (NSMutableDictionary *)dictionaryFromUser:(FIRUser *)user {
for (id<FIRUserInfo> 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;
Expand Down
14 changes: 14 additions & 0 deletions packages/firebase_auth/lib/firebase_auth.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<dynamic, dynamic> _data;

FirebaseUserMetadata._(this._data);

int get creationTimestamp => _data['creationTimestamp'];
int get lastSignInTimestamp => _data['lastSignInTimestamp'];
}

class UserInfo {
final Map<dynamic, dynamic> _data;

Expand Down Expand Up @@ -57,16 +67,20 @@ class UserUpdateInfo {
/// Represents a user.
class FirebaseUser extends UserInfo {
final List<UserInfo> providerData;
final FirebaseUserMetadata _metadata;

FirebaseUser._(Map<dynamic, dynamic> data)
: providerData = data['providerData']
.map<UserInfo>((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.
Expand Down

0 comments on commit cd17003

Please sign in to comment.