loginWithGoogle method
Implementation
@override
Future<DataResult<NUIGoogleLoginResult>> loginWithGoogle() async{
try {
final loginResult = await _googleSignIn.signIn();
logNUI("NUIAuth", "Google sign in successful, email : ${loginResult?.email}, name : ${loginResult?.displayName}");
final bool isSignedIn = await _googleSignIn.isSignedIn();
if(isSignedIn){
final curUser = _googleSignIn.currentUser;
final authentication = await curUser!.authentication;
final googleResp = NUIGoogleLoginResult(displayName: curUser.displayName, id: curUser.id, email: curUser.email, photoUrl: curUser.photoUrl, idToken: authentication.idToken, serverAuthCode: curUser.serverAuthCode, isExpired: false);
// if idToken is null or empty, return google login unsuccessful
if(authentication.idToken.isNullOrEmpty()){ return DataResult<NUIGoogleLoginResult>(success: false, message: NUIAuthMessages.GOOGLE_LOGIN_UNSUCCESSFUL, code: '');}
// send the token back to iStudio server
final ssoReq = NUIAuthSSOSignUpReq(provider: NUIAuthSSOSignUpReq.SSO_TYPE_GOOGLE, providerToken: authentication.idToken!, email: curUser.email);
final result = await _api.ssoLogin(request: ssoReq);
if(result.success && result.data != null){
// save the 3rd-party access token
await secureStorage.write(key: _PREF_SSO_ACCESS_TOKEN, value:authentication.idToken);
// save iStudio access token
final authToken = NUIAuthAccessToken(token: result.data!.accessToken, refreshToken: result.data!.refreshToken);
await _saveLoginResponseData(authToken);
return DataResult<NUIGoogleLoginResult>(success: true, message: NUIAuthMessages.GOOGLE_LOGIN_SUCCESS, data: googleResp, code: '');
}else{
return DataResult<NUIGoogleLoginResult>(success: false, message: NUIAuthMessages.GOOGLE_LOGIN_UNSUCCESSFUL, code: '');
}
}
else{
return DataResult<NUIGoogleLoginResult>(success: false, message: NUIAuthMessages.GOOGLE_LOGIN_UNSUCCESSFUL, code: '');
}
} catch (error) {
logNUI(_MODULE, "Failed to login with Google with error : $error");
return DataResult(success: false, message: NUIAuthMessages.GOOGLE_LOGIN_FAILED, code: '');
}
}