verifyOtp method

Future<LoginResult> verifyOtp({
  1. required String identifier,
  2. required String code,
})

Verifies an OTP code for identifier, storing the resulting session on success.

Implementation

Future<LoginResult> verifyOtp({
  required String identifier,
  required String code,
}) async {
  final uri = auth.baseUrl.resolve('/auth/otp/verify');
  final response = await auth.dio.post<dynamic>(
    uri.toString(),
    data: {'identifier': identifier, 'code': code},
    options: Options(headers: {'Accept': 'application/json'}),
  );
  final data = response.data;
  if (data is Map<String, dynamic>) {
    final mfaRequired =
        data['mfa_required'] == true || data['requires_mfa'] == true;
    final challengeId = (data['challenge_id'] ?? data['challengeId'])
        ?.toString();
    if (mfaRequired && challengeId != null && challengeId.isNotEmpty) {
      return SecondFactorRequiredResult(challengeId);
    }
  }

  final session = auth.endpoints.parseSession(data);
  await auth.store.write(session);
  await auth.restore();
  return AuthenticatedResult(session);
}