Skip to content

Commit

Permalink
Create Firebase auth services to utilize in Flutter
Browse files Browse the repository at this point in the history
  • Loading branch information
patelneel55 committed Dec 30, 2020
1 parent 89b0908 commit 733f438
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 0 deletions.
16 changes: 16 additions & 0 deletions frontend/memoree_client/lib/app/models/user.dart
Original file line number Diff line number Diff line change
@@ -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
});
}
52 changes: 52 additions & 0 deletions frontend/memoree_client/lib/app/services/firebase_auth.dart
Original file line number Diff line number Diff line change
@@ -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<User> get onAuthStateChanged {
return _firebaseAuth.authStateChanges().map(_userFromFirebase);
}

Future<User> 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<void> signOut() async {
await _googleSignIn.disconnect();
return _firebaseAuth.signOut();
}

Future<User> currentUser() async {
final user = _firebaseAuth.currentUser;
return _userFromFirebase(user);
}
}
Binary file added frontend/memoree_client/logos/google_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 733f438

Please sign in to comment.