authenticate static method
Implementation
static Future<Map<String, dynamic>> authenticate({
String? idToken,
String? code,
String? callbackPath,
required String? clientId,
required String? clientSecret,
required String redirectBase,
}) async {
if (clientId == null || clientSecret == null) {
throw AuthException('Google OAuth is not configured');
}
Map<String, dynamic> profile;
if (idToken != null) {
profile = await verifyIdToken(idToken, clientId: clientId);
} else if (code != null) {
if (callbackPath == null) {
throw AuthException('callbackPath is required when using code');
}
final tokens = await _exchangeCodeForToken(
code,
clientId,
clientSecret,
'$redirectBase$callbackPath',
);
final idTokenFromGoogle = tokens['id_token'];
if (idTokenFromGoogle != null) {
profile = await verifyIdToken(idTokenFromGoogle as String,
clientId: clientId);
} else {
throw AuthException('No ID token received from Google');
}
} else {
throw AuthException('Either idToken or code must be provided');
}
return AuthProvider.formatUserData(
provider: 'google',
providerId: profile['sub'],
email: profile['email'],
name: profile['name'],
picture: profile['picture'],
rawProfile: profile,
);
}