有没有办法仅在 Firebase 电话身份验证中登录注册用户

问题描述 投票:0回答:2

我正在使用 Firebase 后端构建一个 React 应用程序,该应用程序要求用户使用电话号码注册并登录。问题是,目前,即使对于没有帐户的用户,一旦收到 OTP,他们就会自动注册。有没有办法检查用户是否未注册,并要求他们注册而不是登录?

我的签到功能

const handleSubmit = async (event) => {
    event.preventDefault();

    if(phone != ''){
        setExpanded(true);
        generateRecaptcha();
        let appVerifier = window.recaptureVerifier;
        signInWithPhoneNumber(auth, phone, appVerifier)
        .then(confirmationResult => {
            window.confirmationResult = confirmationResult;
        }).catch((err) => {
            console.log(err);
        });
        
    }
}

OTP验证:

const verifyOTP = (e) => {
     let otp = e.target.value;
     setOtp(otp);
     if(otp.length === 6) {
        console.log(otp);
        let confirmationResult = window.confirmationResult;
        confirmationResult.confirm(otp).then((result) => {
            const user = result.user;
            if(user != null){
                console.log('Loged');
                router.push('/home')
            }
        }).catch((err) => {
            console.log(err);
        })
          
     }
}

请帮忙。

谢谢。

reactjs firebase google-cloud-firestore
2个回答
1
投票
如果用户不存在,

SignInWithPhoneNumber方法将自动注册新用户。没有办法阻止用户注册,您可以检查返回的用户是否是新用户,如果是新用户,请手动删除并退出该用户。

认证后检查 isNewUser 属性来检查用户是否是第一次登录。您可以参考这个链接

x.confirm(code)
  .then((result) => {
    // User signed in successfully.
    const { isNewUser } = getAdditionalUserInfo(result)
    
    if (isNewUser) {
      // New user - sign up
    } else {
      // Existing user - log in
    }
  })

但是,您可以通过将标志

disableSignUp.status
设置为
true
来禁用新用户注册电子邮件提供商。当新用户尝试注册时,这将显示错误消息。您可以参考此github以获取更多信息


0
投票

作为 Sathi 答案的替代方案:

您可以使用 Firebase Cloud Functions 中的 Firebase Admin SDK 来检查 Firebase 身份验证中是否存在具有给定电话号码的用户。 Python 中此类云函数的示例:

@https_fn.on_call()
def phone_number_registered(req: https_fn.CallableRequest):
    phone_number = req.data['phone_number']

    try:
        auth.get_user_by_phone_number(phone_number)
        return {'registered': True}
    except:
        return {'registered': False}

在您的前端中,您可以在用户输入电话号码时调用此云功能,以检查用户是否已在 Firebase 身份验证中注册。如果是这种情况,您可以调用

signInWithPhoneNumber
函数。否则,你就拒绝。

© www.soinside.com 2019 - 2024. All rights reserved.