verifyOtp method
Verify OTP via API
Implementation
Future<CkAuthResult<void>> verifyOtp({
required String otp,
Map<String, dynamic>? additionalBody,
}) async {
final activeTrigger = lastTrigger;
if (activeTrigger == null) {
return const CkAuthResult<void>.failure(
message: 'No active OTP verification trigger found',
);
}
final url =
(activeTrigger == CkOtpTrigger.forgetPassword &&
_verifyForgetUrl != null)
? _verifyForgetUrl
: _verifyUrl;
if (url == null) {
return const CkAuthResult<void>.failure(
message: 'OTP verify URL is not configured',
);
}
final vToken = getVerificationToken(activeTrigger);
final body = await _config.verifyBodyBuilder(
VerifyOtpCallBack(otp: otp, token: vToken ?? '', trigger: activeTrigger),
);
if (additionalBody != null) {
body.addAll(additionalBody);
}
final headers = <String, String>{};
if (_config.verificationStrategy == CkOtpVerificationStrategy.tokenBased &&
_config.sendVerificationTokenInHeader &&
vToken != null) {
headers[_config.verificationTokenHeaderKey] = vToken;
}
final method =
(activeTrigger == CkOtpTrigger.forgetPassword &&
_verifyForgetUrl != null)
? _verifyForgotMethod
: _verifyMethod;
final response = await CkTransport.request(
input: RequestInput(
endpoint: url,
method: method,
jsonBody: body,
headers: headers,
requiresToken: false,
),
responseBuilder: (data) => data,
showMessage: true,
);
if (response.isSuccess) {
if (_extractors.resetPasswordToken != null) {
_resetPasswordToken = _extractors.resetPasswordToken!(response.data);
}
await storeVerificationToken(activeTrigger, null);
if (lastTrigger == activeTrigger) {
lastTrigger = null;
await CkStorage.delete('core_kit_last_otp_trigger');
}
return CkAuthResult<void>.success(
statusCode: response.statusCode,
rawResponse: response.data,
);
}
return CkAuthResult<void>.failure(
message: response.message,
statusCode: response.statusCode,
rawResponse: response.data,
);
}