Skip to content

Instantly share code, notes, and snippets.

@ewokhias
Created September 13, 2018 21:34
Show Gist options
  • Save ewokhias/1317cb80cc2e2fc60eb2fa68a2cd169c to your computer and use it in GitHub Desktop.
Save ewokhias/1317cb80cc2e2fc60eb2fa68a2cd169c to your computer and use it in GitHub Desktop.
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:logging/logging.dart';
import 'package:pmw_test/data/user.dart';
abstract class Auth {
Future<User> currentUser();
Future<String> verifyPhoneNumber(String phoneNumber);
Future<User> signIn(String phoneNumber, String verificationCode);
}
class FBAuth implements Auth {
final FirebaseAuth _fbAuth = FirebaseAuth.instance;
final mapFBUserToUser = (FirebaseUser fbUser) => null != fbUser ? User(uid: fbUser.uid) : null;
@override
Future<User> currentUser() {
return _fbAuth.currentUser().then(mapFBUserToUser);
}
@override
Future<User> signIn(String verificationCode, String smsCode) {
return _fbAuth
.signInWithPhoneNumber(
verificationId: verificationCode, smsCode: smsCode)
.then(mapFBUserToUser);
}
@override
Future<String> verifyPhoneNumber(String phoneNumber) async {
String verificationCode;
final PhoneVerificationCompleted verificationCompleted =
(FirebaseUser user) =>
_log.info("verification for user ${user.uid} completed");
final PhoneVerificationFailed verificationFailed =
(AuthException authException) => _log.info(
'Phone numbber verification failed. Code: ${authException.code}. Message: ${authException.message}');
final PhoneCodeSent codeSent =
(String verificationId, [int forceResendingToken]) async {
verificationCode = verificationId;
};
final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
(String verificationId) {
verificationCode = verificationId;
};
await _fbAuth.verifyPhoneNumber(
phoneNumber: phoneNumber,
timeout: Duration(seconds: 5),
verificationCompleted: verificationCompleted,
verificationFailed: verificationFailed,
codeSent: codeSent,
codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
return Future.value(verificationCode);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment