使用Firebase进行密码身份验证的电话号码

时间:2019-06-20 07:21:50

标签: android firebase firebase-authentication

在我当前的项目中,我先用电子邮件ID注册一个用户,然后在该用户更新电话号码时在个人资料部分中注册该电话号码,并对我的电话号码进行身份验证,并使用PhoneAuthCredetials合并同一用户的两种身份验证方法。

现在真正的麻烦是,我的用户可以使用电话号码或电子邮件ID登录,但对于电子邮件ID,用户必须输入密码,而对于电话号码,则需要输入OTP。 (我尝试过,输入了signInWithEmailAndPassword()的电话号码和密码,但是没有用)

我希望用户使用带有密码的电子邮件或电话登录。 Flipkart的方式。

有什么办法可以解决这个问题?

3 个答案:

答案 0 :(得分:3)

当前,此功能不存在。

但是,有一些方法可以即兴发挥并仍然可以实现。这是我的建议:

首先,当用户创建一个帐户时,您需要在数据库上创建一个单独的列表,仅用于将电子邮件映射到电话号码。您的数据库可能看起来像这样:

enter image description here

这样,您将获得电子邮件及其链接电话号码的完整列表。

现在,在登录阶段,请执行以下操作:

  • 当用户单击登录按钮时,请检查用户是否输入了电子邮件或电话号码。您可以使用Patterns类执行此检查:

  • 如果用户输入了电子邮件,请继续使用signInWithEmailAndPassword()方法。

  • 如果用户输入了电话号码,请检查FirebaseDatabase列表中的电话号码数据库,并从中获取电子邮件。收到电子邮件后,执行signInWithEmailAndPassword()并传递您收到的电子邮件以及用户输入的密码。

使用此方法的缺点是,它会产生一个额外的呼叫(从电话号码中获取电子邮件),但至少应该可以。

我真的希望这对您有所帮助,编码愉快!

答案 1 :(得分:3)

使用以下代码创建云功能

const functions = require('firebase-functions');
const firebase = require('firebase');
const admin = require('firebase-admin');

admin.initializeApp();
firebase.initializeApp({
    //Add config for web-app here
    //Required because Admin SDK doesn't include signInWithEmailAndPassword method
});

exports.signInWithPhoneAndPassword = functions.https.onCall(async (data, context) => {
    const phoneNumber = data.phone;
    if (phoneNumber === undefined) {
        return {'s':400,'m':'Bad argument: no phone number'};
    }
    const user = await admin.auth().getUserByPhoneNumber(phoneNumber);
    const pass = data.password;
    try {
        await firebase.auth().signInWithEmailAndPassword(user.email, pass);
    } catch (e) {
        return {'s':400,'m':'Wrong password'};
    }
    const token = await admin.auth().createCustomToken(user.uid, {'devClaim':true}); //developer claims, optional param
    return {'s':200,'t':token};
});

在客户端调用此函数,如果它返回带有"s"==200的对象,则使用带有signInWithCustomTokenCalling a Cloud Function from Android through Firebase)的令牌

答案 2 :(得分:1)

Firebase电话身份验证正在使用OTP。这样,无需记住用户密码。一旦通过身份验证,您将被注册。 OTP代码充当密码。不过,如果您想自定义身份验证方法,firebase会提供自定义身份验证方法https://firebase.google.com/docs/auth/android/custom-auth