signInWithApple method
Implementation
Future<CuReSupabaseAuthResponse> signInWithApple(
[Map<String, dynamic>? userMetadata]) async {
try {
final supabase = Supabase.instance.client;
final rawNonce = supabase.auth.generateRawNonce();
final hashedNonce = sha256.convert(utf8.encode(rawNonce)).toString();
final credential = await SignInWithApple.getAppleIDCredential(
scopes: [
AppleIDAuthorizationScopes.email,
AppleIDAuthorizationScopes.fullName,
],
nonce: hashedNonce,
);
final idToken = credential.identityToken;
if (idToken == null) {
// ignore: avoid_print
print(
'[Supabase CuRe Auth] Could not find ID Token from generated credential.');
return CuReSupabaseAuthResponse(
user: null,
session: null,
error: 'Could not find ID Token from generated credential.',
);
}
final result = await supabase.auth.signInWithIdToken(
provider: OAuthProvider.apple,
idToken: idToken,
nonce: rawNonce,
);
// Update user metadata if provided
if (result.user != null && userMetadata != null) {
await supabase.auth.updateUser(
UserAttributes(
data: userMetadata,
),
);
}
return CuReSupabaseAuthResponse(
user: result.user,
session: result.session,
error: null,
);
} catch (e) {
// ignore: avoid_print
print('[Supabase CuRe Auth] Exception during Apple sign in: $e');
return CuReSupabaseAuthResponse(
user: null,
session: null,
error: _getErrorMessage(e),
);
}
}