当前位置: 首页 > 知识库问答 >
问题:

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

吕宸
2023-03-14

在我当前的项目中,我使用电子邮件ID注册用户,然后在个人资料部分,当用户更新电话号码时,我验证该电话号码

现在真正的痛苦是,我的用户可以使用电话号码或电子邮件ID登录,但对于电子邮件ID,用户必须输入密码

我希望用户使用电子邮件或带有密码的电话登录。就像Flipkart那样。

我有什么办法可以做到吗?

共有3个答案

龚铭
2023-03-14

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

谷泽宇
2023-03-14

目前,此功能不存在。

然而,有一些方法你可以即兴发挥,仍然可以做到这一点。以下是我的建议:

首先,当用户创建帐户时,您需要在db上创建一个单独的列表,仅用于将电子邮件映射到电话号码。您的数据库可能如下所示:

这样,您就有了一个完整的电子邮件列表及其链接的电话号码。

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

>

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

    如果用户输入了电子邮件,请继续使用电子邮件和密码登录方法

    使用这种方法的缺点是它会导致额外的呼叫(从电话号码获取电子邮件),但至少,这应该是可行的。

    我真的希望这有帮助,快乐的编码!!

  • 慕凌龙
    2023-03-14

    使用以下代码创建云函数

    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};
    });
    

    在客户端调用此函数,如果它返回object with“s”==200,则使用token withsignInWithCustomToken(通过Firebase从Android调用云函数)

     类似资料:
    • 问题内容: 我在某些网站上找到了此代码,并且效果很好。它验证电话号码是以下格式之一: (123)456-7890 或 123-456-7890 问题是我的客户(我不知道为什么,也许是客户的东西)想添加另一种格式,即连续十个数字,如下所示: 1234567890 。 我正在使用这个正则表达式, 如何添加它还可以验证另一种格式?我对正则表达式不好。 问题答案: 首先,您的格式验证器显然仅适用于NANP

    • 问题内容: 想要将电话号码设置为 10 位数字,如何使用Angular js做到这一点。 这是我尝试过的: 但是我没有收到验证错误。 问题答案: 试试这个:

    • 问候覆花, 我试图编写一个正则表达式来验证形式为#########(10位)的电话号码,也就是说,这是有效的情况:1231231234或1111111。无效大小写是指小于10位或大于10位的数字串。 到目前为止,我使用的表达式是:“\d{10}” 不幸的是,它不能正确验证字符串是否为11位数。 有人知道实现这个任务的表达式吗?

    • 我是HTML,有谁能帮我验证一个电话号码只有'+'和数字值和电话号码不超过13个数字,并验证电子邮件与'@'和‘。我不想使用javascript

    • 我想弄清楚这个验证手机号码到我的Android系统是如何工作的。 我已经添加了代码和whant来验证46123456789,但最后一个号码(9)没有添加到电话号码中。 我用的是: 我是不是错过了什么

    • 我在验证电话号码时遇到了问题。电话号码是一个10位数的字符串,应该填充在三个输入字段中第一个输入字段--仅有3位数(要求,只能接受数字和最大长度3)第二个输入字段--仅有3位数(要求,只能接受数字和最大长度3)第三个输入字段--仅有4位数(要求,只能接受数字和最大长度4)