我想驗證一個用戶的電話號碼,然后只允許該用戶注冊。但是為此,verifyPhoneNumber即使我申請await,當我打電話時也不會等到驗證完成。它執行下一行。所以我想要做的是除非verificationCompleted、verificationFailed、codeAutoRetrievalTimeout中的任何一個完成,否則我想等待然后只執行為資料庫中的用戶創建檔案的代碼。任何幫助將不勝感激!!!
static Future signUp(BuildContext context, String name, String phoneNumber,
String email, String gender) async {
await auth.verifyPhoneNumber(
phoneNumber: phoneNumber,
verificationCompleted: (credential) async {
await auth.signInWithCredential(credential);
},
verificationFailed: _verificationFailed,
codeSent: (String verificationId, int resendToken) async{
await _codeSent(verificationId, resendToken, context);
},
codeAutoRetrievalTimeout: (String timeout) {});
if (auth.currentUser != null) {
await DB.users.doc(auth.currentUser.uid).set({
name: name,
phoneNumber: phoneNumber,
email: email,
});
}
return;
}
謝謝!!
uj5u.com熱心網友回復:
FirebaseAuth.verifyPhoneNumber 開始驗證。我希望它Future在發出驗證請求時完成回傳,而不是在接收者完成驗證時完成。
如果你真的想要一個Future可以被await編輯的,你可以使用一個Completer. 使用它來轉換完成回呼集的一種方法:
var verificationCompleter = Completer<PhoneAuthCredential>();
await auth.verifyPhoneNumber(
phoneNumber: phoneNumber,
verificationCompleted: (credential) {
verificationCompleter.complete(credential);
},
verificationFailed: (error) {
verificationComplete.completeError(error);
},
codeSent: (String verificationId, int resendToken) async{
await _codeSent(verificationId, resendToken, context);
},
codeAutoRetrievalTimeout: (String id) {
verificationComplete.completeError(
TimeoutException('Verification request timed out'),
);
},
);
PhoneAuthCredential credential;
try {
credential = await verificationComplete.future;
} on FirebaseAuthException catch (e) {
_verificationFailed(error);
return;
} on TimeoutException {
// Handle a timeout error however you like.
// ...
return;
}
await auth.signInWithCredential(credential);
if (auth.currentUser != null) {
// ...
}
uj5u.com熱心網友回復:
你可以你.then條款。所以在你的代碼中你可以像下面一樣附加它。該value引數包含從等待該then子句的代碼傳遞的任何資訊。
static Future signUp(BuildContext context, String name, String phoneNumber,
String email, String gender) async {
await auth.verifyPhoneNumber(
phoneNumber: phoneNumber,
verificationCompleted: (credential) async {
await auth.signInWithCredential(credential);
},
verificationFailed: _verificationFailed,
codeSent: (String verificationId, int resendToken) async{
await _codeSent(verificationId, resendToken, context);
},
codeAutoRetrievalTimeout: (String timeout) {}).then((value){
//Code you want to execute after the above is completed.
if (auth.currentUser != null) {
await DB.users.doc(auth.currentUser.uid).set({
name: name,
phoneNumber: phoneNumber,
email: email,
});
}
return;
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318781.html
標籤:扑 镖 异步 异步等待 firebase-身份验证
上一篇:jsx內部的異步函式呼叫
