Google SSO 로그인을 위한 것이다.
구글 로그인시에는 ...
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;
}
}
구글 로그아웃시에는
유저에 관한 것들을 스테이트 클래스에서 지우고
구글에서 지원하는 메소드 _googleSignIn.signOut()을 한다
void logoutCallback() async {
authStatus = AuthStatus.NOT_LOGGED_IN;
userId = '';
_userModel = null;
user = null;
_profileUserModelList = null;
if (isSignInWithGoogle) {
await _googleSignIn.signOut();
logEvent('google_logout');
}
await _firebaseAuth.signOut();
notifyListeners();
}
/// Alter select auth method, login and sign up page
void openSignUpPage() {
authStatus = AuthStatus.NOT_LOGGED_IN;
userId = '';
notifyListeners();
}