Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.
Merged
8 changes: 8 additions & 0 deletions packages/firebase_auth/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
## 0.12.0

* **Breaking change**: Replace `FirebaseUserMetadata.creationTimestamp` and
`FirebaseUserMetadata.lastSignInTimestamp` with `creationTime` and `lastSignInTime`.
Previously on iOS `creationTimestamp` and `lastSignInTimestamp` returned in
seconds and on Android in milliseconds. Now, both platforms provide values as a
`DateTime`.

## 0.11.1+12

* Update google-services Android gradle plugin to 4.3.0 in documentation and examples.
Expand Down
12 changes: 11 additions & 1 deletion packages/firebase_auth/example/test/firebase_auth.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_driver/driver_extension.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:firebase_auth/firebase_auth.dart';

void main() {
final Completer<String> completer = Completer<String>();
Expand All @@ -19,6 +20,15 @@ void main() {
final FirebaseUser user = await auth.signInAnonymously();
expect(user.uid, isNotNull);
expect(user.isAnonymous, isTrue);
expect(user.metadata.creationTime.isAfter(DateTime(2018, 1, 1)), isTrue);
expect(user.metadata.creationTime.isBefore(DateTime.now()), isTrue);
await auth.signOut();
final FirebaseUser user2 = await auth.signInAnonymously();
expect(user2.uid, isNot(equals(user.uid)));
expect(user2.metadata.creationTime.isBefore(user.metadata.creationTime),
isFalse);
expect(
user2.metadata.lastSignInTime, equals(user2.metadata.creationTime));
});

test('isSignInWithEmailLink', () async {
Expand Down
6 changes: 3 additions & 3 deletions packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -348,12 +348,12 @@ - (NSMutableDictionary *)dictionaryFromUser:(FIRUser *)user {
[providerData addObject:toDictionary(userInfo)];
}

long creationDate = [user.metadata.creationDate timeIntervalSince1970];
long lastSignInDate = [user.metadata.lastSignInDate timeIntervalSince1970];
long creationDate = [user.metadata.creationDate timeIntervalSince1970] * 1000;
long lastSignInDate = [user.metadata.lastSignInDate timeIntervalSince1970] * 1000;

NSMutableDictionary *userData = [toDictionary(user) mutableCopy];
userData[@"creationTimestamp"] = [NSNumber numberWithLong:creationDate];
userData[@"lastSignInTimestamp"] = [NSNumber numberWithInt:lastSignInDate];
userData[@"lastSignInTimestamp"] = [NSNumber numberWithLong:lastSignInDate];
userData[@"isAnonymous"] = [NSNumber numberWithBool:user.isAnonymous];
userData[@"isEmailVerified"] = [NSNumber numberWithBool:user.isEmailVerified];
userData[@"providerData"] = providerData;
Expand Down
10 changes: 8 additions & 2 deletions packages/firebase_auth/lib/src/user_metadata.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,13 @@ class FirebaseUserMetadata {

final Map<String, dynamic> _data;

int get creationTimestamp => _data['creationTimestamp'];
/// The timestamp at which this account was created as dictated by the server clock.
DateTime get creationTime =>
DateTime.fromMillisecondsSinceEpoch(_data['creationTimestamp']);

int get lastSignInTimestamp => _data['lastSignInTimestamp'];
/// The last sign-in timestamp as dictated by the server clock.
///
/// This is only accurate up to a granularity of 2 minutes for consecutive sign-in attempts.
DateTime get lastSignInTime =>
DateTime.fromMillisecondsSinceEpoch(_data['lastSignInTimestamp']);
}
2 changes: 1 addition & 1 deletion packages/firebase_auth/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: Flutter plugin for Firebase Auth, enabling Android and iOS
like Google, Facebook and Twitter.
author: Flutter Team <flutter-dev@googlegroups.com>
homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_auth
version: "0.11.1+12"
version: "0.12.0"

flutter:
plugin:
Expand Down
6 changes: 6 additions & 0 deletions packages/firebase_auth/test/firebase_auth_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ const String kMockPhoneNumber = '5555555555';
const String kMockVerificationId = '12345';
const String kMockSmsCode = '123456';
const String kMockLanguage = 'en';
final DateTime kMockCreationTime = DateTime(2019, 1, 1);
final DateTime kMockLastSignInTime = DateTime.now().subtract(const Duration(days: 1));

void main() {
group('$FirebaseAuth', () {
Expand Down Expand Up @@ -1229,6 +1231,10 @@ Map<String, dynamic> mockFirebaseUser(
'email': email,
},
],
'metadata': <String, dynamic>{
'creationTimestamp': kMockCreationTime.millisecondsSinceEpoch,
'lastSignInTimestamp': kMockLastSignInTime.millisecondsSinceEpoch,
},
};

/// Queue whose remove operation is asynchronous, awaiting a corresponding add.
Expand Down