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 the, create a welcome/ setup page, for example)
  • Loading branch information
LucasParsy committed Aug 14, 2018
1 parent 99a2efa commit e18c849
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,8 @@ private ImmutableMap<String, Object> mapFromUser(FirebaseUser user) {
}
ImmutableMap<String, Object> userMap =
userInfoToMap(user)
.put("creationTimestamp", user.getMetadata().getCreationTimestamp())
.put("lastSignInTimestamp", user.getMetadata().getLastSignInTimestamp())
.put("isAnonymous", user.isAnonymous())
.put("isEmailVerified", user.isEmailVerified())
.put("providerData", providerDataBuilder.build())
Expand Down
2 changes: 2 additions & 0 deletions packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,8 @@ - (NSMutableDictionary *)dictionaryFromUser:(FIRUser *)user {
[providerData addObject:toDictionary(userInfo)];
}
NSMutableDictionary *userData = [toDictionary(user) mutableCopy];
userData[@"creationTimestamp"] = user.metadata.creationDate;
userData[@"lastSignInTimestamp"] = user.metadata.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 e18c849

Please sign in to comment.