drf-firebase-auth
drf-firebase-auth copied to clipboard
could you provide an example how to use it?
Maybe just me, could you provide an example how to use it?
For example, do you still need to import firebase_admin, and verifyIdToken(), in every API calls?
Flutter implementation if anyone needs it
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:flutter_facebook_login/flutter_facebook_login.dart' ;
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = GoogleSignIn();
final FacebookLogin fbLogin = new FacebookLogin();
String name;
String email;
String imageUrl;
String token;
Future<String> signInWithGoogle() async {
final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
final AuthResult authResult = await _auth.signInWithCredential(credential);
final FirebaseUser user = authResult.user;
// Checking if email and name is null
assert(user.email != null);
assert(user.displayName != null);
assert(user.photoUrl != null);
print(user.displayName);
name = user.displayName;
email = user.email;
imageUrl = user.photoUrl;
// Only taking the first part of the name, i.e., First Name
if (name.contains(" ")) {
name = name.substring(0, name.indexOf(" "));
}
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
imageUrl = user.photoUrl;
currentUser.getIdToken().then((result) {
token = result.token;
//save key and call backend for creating
});
return 'signInWithGoogle succeeded: $user';
}
void signOutGoogle() async {
await googleSignIn.signOut();
print("User Sign Out");
}
Future<String> signInWithfb(BuildContext context) async {
FirebaseUser currentUser;
// fbLogin.loginBehavior = FacebookLoginBehavior.webViewOnly;
// if you remove above comment then facebook login will take username and pasword for login in Webview
try {
final FacebookLoginResult facebookLoginResult =
await fbLogin.logIn(['email', 'public_profile']);
if (facebookLoginResult.status == FacebookLoginStatus.loggedIn) {
FacebookAccessToken facebookAccessToken =
facebookLoginResult.accessToken;
final AuthCredential credential = FacebookAuthProvider.getCredential(
accessToken: facebookAccessToken.token);
final AuthResult authResult = await _auth.signInWithCredential(credential);
final FirebaseUser user = authResult.user;
assert(user.email != null);
assert(user.displayName != null);
assert(!user.isAnonymous);
assert(user.photoUrl!= null);
print(user.displayName);
name = user.displayName;
email = user.email;
imageUrl = user.photoUrl;
assert(await user.getIdToken() != null);
user.getIdToken().then((result) {
token = result.token;
//save key and call backend for creating
});
currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
return 'signInWithfb succeeded: $currentUser';
}
} catch (e) {
print(e);
}
return 'signInWithfb succeeded: $currentUser';
}
Future<bool> facebookLoginout() async {
await _auth.signOut();
await fbLogin.logOut();
return true;
}
Flutter implementation if anyone needs it
import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:flutter_facebook_login/flutter_facebook_login.dart' ; final FirebaseAuth _auth = FirebaseAuth.instance; final GoogleSignIn googleSignIn = GoogleSignIn(); final FacebookLogin fbLogin = new FacebookLogin(); String name; String email; String imageUrl; String token; Future<String> signInWithGoogle() async { final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn(); final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication; final AuthCredential credential = GoogleAuthProvider.getCredential( accessToken: googleSignInAuthentication.accessToken, idToken: googleSignInAuthentication.idToken, ); final AuthResult authResult = await _auth.signInWithCredential(credential); final FirebaseUser user = authResult.user; // Checking if email and name is null assert(user.email != null); assert(user.displayName != null); assert(user.photoUrl != null); print(user.displayName); name = user.displayName; email = user.email; imageUrl = user.photoUrl; // Only taking the first part of the name, i.e., First Name if (name.contains(" ")) { name = name.substring(0, name.indexOf(" ")); } assert(!user.isAnonymous); assert(await user.getIdToken() != null); final FirebaseUser currentUser = await _auth.currentUser(); assert(user.uid == currentUser.uid); imageUrl = user.photoUrl; currentUser.getIdToken().then((result) { token = result.token; //save key and call backend for creating }); return 'signInWithGoogle succeeded: $user'; } void signOutGoogle() async { await googleSignIn.signOut(); print("User Sign Out"); } Future<String> signInWithfb(BuildContext context) async { FirebaseUser currentUser; // fbLogin.loginBehavior = FacebookLoginBehavior.webViewOnly; // if you remove above comment then facebook login will take username and pasword for login in Webview try { final FacebookLoginResult facebookLoginResult = await fbLogin.logIn(['email', 'public_profile']); if (facebookLoginResult.status == FacebookLoginStatus.loggedIn) { FacebookAccessToken facebookAccessToken = facebookLoginResult.accessToken; final AuthCredential credential = FacebookAuthProvider.getCredential( accessToken: facebookAccessToken.token); final AuthResult authResult = await _auth.signInWithCredential(credential); final FirebaseUser user = authResult.user; assert(user.email != null); assert(user.displayName != null); assert(!user.isAnonymous); assert(user.photoUrl!= null); print(user.displayName); name = user.displayName; email = user.email; imageUrl = user.photoUrl; assert(await user.getIdToken() != null); user.getIdToken().then((result) { token = result.token; //save key and call backend for creating }); currentUser = await _auth.currentUser(); assert(user.uid == currentUser.uid); return 'signInWithfb succeeded: $currentUser'; } } catch (e) { print(e); } return 'signInWithfb succeeded: $currentUser'; } Future<bool> facebookLoginout() async { await _auth.signOut(); await fbLogin.logOut(); return true; }
Needed to brag took me two days to figure this out , Just started with flutter
Flutter implementation if anyone needs it
import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:flutter_facebook_login/flutter_facebook_login.dart' ; final FirebaseAuth _auth = FirebaseAuth.instance; final GoogleSignIn googleSignIn = GoogleSignIn(); final FacebookLogin fbLogin = new FacebookLogin(); String name; String email; String imageUrl; String token; Future<String> signInWithGoogle() async { final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn(); final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication; final AuthCredential credential = GoogleAuthProvider.getCredential( accessToken: googleSignInAuthentication.accessToken, idToken: googleSignInAuthentication.idToken, ); final AuthResult authResult = await _auth.signInWithCredential(credential); final FirebaseUser user = authResult.user; // Checking if email and name is null assert(user.email != null); assert(user.displayName != null); assert(user.photoUrl != null); print(user.displayName); name = user.displayName; email = user.email; imageUrl = user.photoUrl; // Only taking the first part of the name, i.e., First Name if (name.contains(" ")) { name = name.substring(0, name.indexOf(" ")); } assert(!user.isAnonymous); assert(await user.getIdToken() != null); final FirebaseUser currentUser = await _auth.currentUser(); assert(user.uid == currentUser.uid); imageUrl = user.photoUrl; currentUser.getIdToken().then((result) { token = result.token; //save key and call backend for creating }); return 'signInWithGoogle succeeded: $user'; } void signOutGoogle() async { await googleSignIn.signOut(); print("User Sign Out"); } Future<String> signInWithfb(BuildContext context) async { FirebaseUser currentUser; // fbLogin.loginBehavior = FacebookLoginBehavior.webViewOnly; // if you remove above comment then facebook login will take username and pasword for login in Webview try { final FacebookLoginResult facebookLoginResult = await fbLogin.logIn(['email', 'public_profile']); if (facebookLoginResult.status == FacebookLoginStatus.loggedIn) { FacebookAccessToken facebookAccessToken = facebookLoginResult.accessToken; final AuthCredential credential = FacebookAuthProvider.getCredential( accessToken: facebookAccessToken.token); final AuthResult authResult = await _auth.signInWithCredential(credential); final FirebaseUser user = authResult.user; assert(user.email != null); assert(user.displayName != null); assert(!user.isAnonymous); assert(user.photoUrl!= null); print(user.displayName); name = user.displayName; email = user.email; imageUrl = user.photoUrl; assert(await user.getIdToken() != null); user.getIdToken().then((result) { token = result.token; //save key and call backend for creating }); currentUser = await _auth.currentUser(); assert(user.uid == currentUser.uid); return 'signInWithfb succeeded: $currentUser'; } } catch (e) { print(e); } return 'signInWithfb succeeded: $currentUser'; } Future<bool> facebookLoginout() async { await _auth.signOut(); await fbLogin.logOut(); return true; }
Thanks man, how about login using sms?