firebase auth 나 google 에서 제공해주는 객체를 그대로 사용하는듯 하다
UserModel 과는 다른듯
/// Verify user's credentials for login
Future<String> signIn(String email, String password,
{GlobalKey<ScaffoldState> scaffoldKey}) async {
try {
loading = true;
var result = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
user = result.user;
userId = user.uid;
return user.uid;
} catch (error) {
loading = false;
cprint(error, errorIn: 'signIn');
kAnalytics.logLogin(loginMethod: 'email_login');
customSnackBar(scaffoldKey, error.message);
// logoutCallback();
return null;
}
}
/// Create user from `google login`
/// If user is new then it create a new user
/// If user is old then it just `authenticate` user and return firebase user data
Future<User> handleGoogleSignIn() async {
try {
/// Record log in firebase kAnalytics about Google login
kAnalytics.logLogin(loginMethod: 'google_login');
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
if (googleUser == null) {
throw Exception('Google login cancelled by user');
}
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
// final AuthCredential credential = GoogleAuthProvider.getCredential(
// accessToken: googleAuth.accessToken,
// idToken: googleAuth.idToken,
// );\
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
user = (await _firebaseAuth.signInWithCredential(credential)).user;
authStatus = AuthStatus.LOGGED_IN;
userId = user.uid;
isSignInWithGoogle = true;
createUserFromGoogleSignIn(user);
notifyListeners();
return user;
} on PlatformException catch (error) {
user = null;
authStatus = AuthStatus.NOT_LOGGED_IN;
cprint(error, errorIn: 'handleGoogleSignIn');
return null;
} on Exception catch (error) {
user = null;
authStatus = AuthStatus.NOT_LOGGED_IN;
cprint(error, errorIn: 'handleGoogleSignIn');
return null;
} catch (error) {
user = null;
authStatus = AuthStatus.NOT_LOGGED_IN;
cprint(error, errorIn: 'handleGoogleSignIn');
return null;
}
}