From 733f4382b9841b8d0eec006b2f5cce41e96f6228 Mon Sep 17 00:00:00 2001 From: Neel Patel Date: Wed, 30 Dec 2020 01:22:53 -0600 Subject: [PATCH] Create Firebase auth services to utilize in Flutter --- .../memoree_client/lib/app/models/user.dart | 16 ++++++ .../lib/app/services/firebase_auth.dart | 52 ++++++++++++++++++ frontend/memoree_client/logos/google_logo.png | Bin 0 -> 11199 bytes 3 files changed, 68 insertions(+) create mode 100755 frontend/memoree_client/lib/app/models/user.dart create mode 100755 frontend/memoree_client/lib/app/services/firebase_auth.dart create mode 100755 frontend/memoree_client/logos/google_logo.png diff --git a/frontend/memoree_client/lib/app/models/user.dart b/frontend/memoree_client/lib/app/models/user.dart new file mode 100755 index 0000000..3d1f23b --- /dev/null +++ b/frontend/memoree_client/lib/app/models/user.dart @@ -0,0 +1,16 @@ +import 'package:meta/meta.dart'; + +@immutable +class User { + final String uid; + final String email; + final String photoUrl; + final String displayName; + + const User({ + @required this.uid, + this.email, + this.photoUrl, + this.displayName + }); +} \ No newline at end of file diff --git a/frontend/memoree_client/lib/app/services/firebase_auth.dart b/frontend/memoree_client/lib/app/services/firebase_auth.dart new file mode 100755 index 0000000..6f1efb3 --- /dev/null +++ b/frontend/memoree_client/lib/app/services/firebase_auth.dart @@ -0,0 +1,52 @@ +import 'package:firebase_auth/firebase_auth.dart' as auth; +import 'package:firebase_core/firebase_core.dart'; +import 'package:google_sign_in/google_sign_in.dart'; +import 'package:memoree_client/app/models/user.dart'; + +class FirebaseAuthService { + final auth.FirebaseAuth _firebaseAuth; + final GoogleSignIn _googleSignIn; + + FirebaseAuthService({auth.FirebaseAuth firebaseAuth, GoogleSignIn googleSignin}) + : _firebaseAuth = firebaseAuth ?? auth.FirebaseAuth.instance, + _googleSignIn = googleSignin ?? GoogleSignIn(); + + User _userFromFirebase(auth.User user) { + if (user == null) { + return null; + } + return User( + uid: user.uid, + email: user.email, + displayName: user.displayName, + photoUrl: user.photoURL, + ); + } + + Stream get onAuthStateChanged { + return _firebaseAuth.authStateChanges().map(_userFromFirebase); + } + + Future signInWithGoogle() async { + await Firebase.initializeApp(); + + final googleUser = await _googleSignIn.signIn(); + final googleAuth = await googleUser.authentication; + final credential = auth.GoogleAuthProvider.credential( + accessToken: googleAuth.accessToken, + idToken: googleAuth.idToken, + ); + final authResult = await _firebaseAuth.signInWithCredential(credential); + return _userFromFirebase(authResult.user); + } + + Future signOut() async { + await _googleSignIn.disconnect(); + return _firebaseAuth.signOut(); + } + + Future currentUser() async { + final user = _firebaseAuth.currentUser; + return _userFromFirebase(user); + } +} \ No newline at end of file diff --git a/frontend/memoree_client/logos/google_logo.png b/frontend/memoree_client/logos/google_logo.png new file mode 100755 index 0000000000000000000000000000000000000000..371a6aee2bcf80fee8b886d2175a40c1d2ca80de GIT binary patch literal 11199 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