Created
September 13, 2018 21:34
-
-
Save ewokhias/1317cb80cc2e2fc60eb2fa68a2cd169c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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