otp function
Implementation
Future<String?> otp(String code, AppSettings appSettings,
String stringPleaseEnterCode, // Please enter valid code
) async {
try {
//
// Twilio
//
if (appSettings.otpTwilioEnable) {
var serviceId = appSettings.twilioServiceId;
var url = 'https://verify.twilio.com/v2/Services/$serviceId/VerificationCheck';
Map<String, String> requestHeaders = {
'Accept': "application/json",
'Authorization' : "Basic ${base64Encode(
utf8.encode("${appSettings.twilioAccountSID}:${appSettings.twilioAuthToken}"))}",
};
Map<String, dynamic> map = {};
map['To'] = _lastPhone;
map['Code'] = code;
var response = await http.post(Uri.parse(url), headers: requestHeaders, body: map).timeout(const Duration(seconds: 30));
if (response.statusCode == 200) {
var jsonResult = json.decode(response.body);
if (jsonResult['status'] != "approved")
return stringPleaseEnterCode; /// Please enter valid code
User? user = FirebaseAuth.instance.currentUser;
if (user == null)
return "user = null";
await FirebaseFirestore.instance.collection("listusers").doc(user.uid).set({
"phoneVerified": true,
"phone": _lastPhone,
}, SetOptions(merge:true));
needOTPParam = false;
userAccountData.userPhone = _lastPhone;
return null;
}
return response.reasonPhrase;
}
//
// Firebase
//
if (appSettings.otpEnable) {
PhoneAuthCredential _credential = PhoneAuthProvider.credential(verificationId: _verificationId, smsCode: code);
User? user = FirebaseAuth.instance.currentUser;
if (user != null) {
var user1 = await user.linkWithCredential(_credential);
dprint("linkWithCredential =${user1.user!.uid}");
await FirebaseFirestore.instance.collection("listusers").doc(user.uid).set({
"phoneVerified": true,
"phone": _lastPhone,
}, SetOptions(merge:true));
needOTPParam = false;
userAccountData.userPhone = _lastPhone;
}
}
//
// Nexmo
//
if (appSettings.otpNexmoEnable) {
if (_codeSent == code){
User? user = FirebaseAuth.instance.currentUser;
if (user != null) {
await FirebaseFirestore.instance.collection("listusers").doc(user.uid).set({
"phoneVerified": true,
"phone": _lastPhone,
}, SetOptions(merge:true));
needOTPParam = false;
userAccountData.userPhone = _lastPhone;
}else
return stringPleaseEnterCode; /// "Please enter valid code",
}
}
//
// SMS to
//
if (appSettings.otpSMSToEnable) {
if (_codeSent == code){
User? user = FirebaseAuth.instance.currentUser;
if (user != null) {
await FirebaseFirestore.instance.collection("listusers").doc(user.uid).set({
"phoneVerified": true,
"phone": _lastPhone,
}, SetOptions(merge:true));
needOTPParam = false;
userAccountData.userPhone = _lastPhone;
}
}else
return stringPleaseEnterCode; /// "Please enter valid code",
}
}catch(ex){
return "otp " + ex.toString();
}
return null;
}