【问题标题】:how to check if phone is exist in firebase auth android studio java如何检查手机是否存在于 firebase auth android studio java
【发布时间】:2023-01-31 04:23:52
【问题描述】:

嘿,我尝试检查我的 firebase 身份验证中是否存在用户插入的电话号码 (登录活动) 我以这种方式尝试


String phoneNumber = "+1234567890";

mAuth.fetchSignInMethodsForEmail(phoneNumber)
        .addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
            @Override
            public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
                if (task.isSuccessful()) {
                    SignInMethodQueryResult result = task.getResult();
                    List<String> signInMethods = result.getSignInMethods();
                    if (signInMethods.contains("phone")) {
                        // Phone number is already in use in Firebase Auth
                    } else {
                        // Phone number is not in use in Firebase Auth
                    }
                } else {
                    // An error occurred
                }
            }
        });

当涉及到这个函数时,调试器会跳转它并且什么都不做 .addOnCompleteListener(新的 OnCompleteListener() {

我尝试使用 firebase sdk admin,但它也不起作用 谁能知道如何解决这个问题?

【问题讨论】:

    标签: java android firebase firebase-authentication


    【解决方案1】:

    您可以通过三种方式解决此问题。客户端上有两个选项,使用 Java 代码,另一个选项使用 Admin SDK。

    解决方案 1

    当用户首次登录到您的应用程序时,使用如下所示的模式将用户数据保存在 Firestore 中:

    db
    |
    --- users (collection)
         |
         --- $uid (document)
              |
              --- phoneNumber: "+1234567890"
    

    要检查具有 +1234567890 的用户是否已经存在,那么您必须在 Java 中执行如下所示的查询:

    FirebaseFirestore db = FirebaseFirestore.getInstance();
    Query queryPhoneNumber = db.collection("users").whereEqualTo("phoneNumber", "+1234567890");
    queryPhoneNumber.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
                for (QueryDocumentSnapshot document : task.getResult()) {
                    if (document.exists()) {
                        Log.d(TAG, "User already exists.");
                    } else {
                        Log.d(TAG, "User doesn't exist.");
                    }
                }
            } else {
                Log.d(TAG, task.getException().getMessage()); //Never ignore potential errors!
            }
        }
    });
    

    方案二

    另一个更优雅和简单的解决方案是使用 Query#count() 方法:

    queryByEmail.count();
    

    如果结果 > 0 则表示该用户已经存在,否则不存在。

    解决方案 3

    最后一个解决方案是使用可以从您的应用程序调用的Callable Cloud Function。因为我们在 Cloud Functions 中使用 Admin SDK,所以您可以调用 getUserByPhoneNumber() 方法。在代码中它看起来像这样:

    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    admin.initializeApp();
    
    exports.checkPhoneNumberExists = functions.https.onCall((data, context) => {
        return admin.auth()
            .getUserByPhoneNumber(data.phoneNumber)
            .then((userRecord) => {
                return { phoneNumber: true }
            })
            .catch((error) => {
                throw new functions.https.HttpsError('invalid-argument', "phoneNumber doesn't exist");
            });
    
    });
    

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 2019-01-04
      • 2021-02-26
      • 2015-06-07
      • 2016-10-11
      相关资源
      最近更新 更多