我正在使用 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);
})
}
}
请帮忙。
谢谢。
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以获取更多信息
作为 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
函数。否则,你就拒绝。