fetchAccountDetails method
Returns the account details for the given accessToken.
Implementation
Future<GoogleAccountDetails> fetchAccountDetails(
final Session session, {
required final String idToken,
required final String? accessToken,
}) async {
final String clientId = config.clientSecret.clientId;
Map<String, dynamic> data;
try {
data = await IdTokenVerifier.verifyOAuth2Token(
idToken,
config: const GoogleIdTokenConfig(),
audience: clientId,
);
} catch (e) {
session.logAndThrow('Failed to verify ID token from Google');
}
if (accessToken != null) {
final response = await http.get(
Uri.https('www.googleapis.com', '/oauth2/v3/userinfo'),
headers: {'Authorization': 'Bearer $accessToken'},
);
if (response.statusCode != 200) {
session.logAndThrow('Failed to get user info from Google');
}
data = jsonDecode(response.body);
}
GoogleAccountDetails details;
try {
details = _parseAccountDetails(data);
} catch (e) {
session.logAndThrow('Invalid user info from Google: $e');
}
try {
final getExtraInfoCallback = config.getExtraGoogleInfoCallback;
if (accessToken != null && getExtraInfoCallback != null) {
await getExtraInfoCallback(
session,
accountDetails: details,
accessToken: accessToken,
transaction: null,
);
}
} catch (e) {
session.logAndThrow('Failed to get extra Google account info: $e');
}
return details;
}