Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save funwithflutter/715c26cd961f7450d58441095b3cafad to your computer and use it in GitHub Desktop.
Save funwithflutter/715c26cd961f7450d58441095b3cafad to your computer and use it in GitHub Desktop.
An example Firebase authentication service class
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import '../models/user.dart';
class FirebaseAuthService {
final FirebaseAuth _firebaseAuth;
final GoogleSignIn _googleSignIn;
FirebaseAuthService({FirebaseAuth firebaseAuth, GoogleSignIn googleSignin})
: _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance,
_googleSignIn = googleSignin ?? GoogleSignIn();
User _userFromFirebase(FirebaseUser 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.onAuthStateChanged.map(_userFromFirebase);
}
Future<User> signInAnonymously() async {
final authResult = await _firebaseAuth.signInAnonymously();
return _userFromFirebase(authResult.user);
}
Future<User> signInWithGoogle() async {
final googleUser = await _googleSignIn.signIn();
final googleAuth = await googleUser.authentication;
final credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
final authResult = await _firebaseAuth.signInWithCredential(credential);
return _userFromFirebase(authResult.user);
}
Future<void> signOut() async {
return _firebaseAuth.signOut();
}
Future<User> currentUser() async {
final user = await _firebaseAuth.currentUser();
return _userFromFirebase(user);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment