Javascript react本机firebase电话身份验证-非常奇怪的行为

Javascript react本机firebase电话身份验证-非常奇怪的行为,javascript,react-native,firebase-authentication,react-native-android,react-native-firebase,Javascript,React Native,Firebase Authentication,React Native Android,React Native Firebase,我从RNFB复制了电话验证的代码,几乎完全是从他们的网站上复制的……请参阅下面的代码(链接)。当我使用Firebase提供的“用于测试的电话号码”功能运行代码时(即使用假电话号码)..然后,当我运行signInWithPhoneNumber函数时,它不会在FB中创建用户…直到我运行confirmCode函数,它才会在FB中创建用户。据我所知,这就是它的工作方式。 但是…当我使用自己的电话号码运行MyPhoneAuthButtonfn时(即“真实”测试)…然后短信验证消息会发送给我,并且用户会立即

我从RNFB复制了电话验证的代码,几乎完全是从他们的网站上复制的……请参阅下面的代码(链接)。

当我使用Firebase提供的“用于测试的电话号码”功能运行代码时(即使用假电话号码)..然后,当我运行
signInWithPhoneNumber
函数时,它不会在FB中创建用户…直到我运行
confirmCode
函数,它才会在FB中创建用户。据我所知,这就是它的工作方式。
但是…当我使用自己的电话号码运行
MyPhoneAuthButton
fn时(即“真实”测试)…然后短信验证消息会发送给我,并且用户会立即在FB中创建,而无需运行
confirmCode
fn
。 为什么在prod中测试和运行时它的行为会有所不同?我应该为哪个流程编码? 谢谢你的帮助

const MyPhoneAuthButton = props => {
  const [objConfirm, setObjConfirm] = useState(null);
  const [code, setCode] = useState('');

  // Handle the button press
  const signInWithPhoneNumber = phoneNumber => {
    auth()
      .signInWithPhoneNumber(phoneNumber)
      .then(confirmResult => {
        setObjConfirm(confirmResult);
      })
      .catch(err => {
        console.log('Invalid Phone Number', err.message);
      });
  };

  const confirmCode = () => {
    objConfirm
      .confirm(code)
      .then(user => {
        console.log('User auth by phone OK', user);
      .catch(err => {
        console.log('Invalid code.', err.message);
      });
  };


  <MyButton
    onPress={() => {
      signInWithPhoneNumber(props.telNum);
    }}>
    Sign in With Phone Number
  </MyButton>

  const signInWithPhoneNumber = phoneNumber => {
    auth()
      .signInWithPhoneNumber(phoneNumber)
      .then(confirmResult => {
        console.log('User successfully authorized via telNum');
        setObjConfirm(confirmResult);
      })
      .catch(err => {
        Alert.alert('Invalid Phone Number', err.message);
        console.log('Invalid Phone Number', err.message);
      });
  };
constMyPhoneAuthButton=props=>{
const[objConfirm,setObjConfirm]=useState(null);
const[code,setCode]=useState(“”);
//按按钮
const signInWithPhoneNumber=电话号码=>{
auth()
.signInWithPhoneNumber(电话号码)
。然后(confirmResult=>{
SetObjConfig(确认结果);
})
.catch(错误=>{
console.log('无效电话号码',错误消息);
});
};
const confirmCode=()=>{
对象确认
.确认(代码)
。然后(用户=>{
console.log('User auth by phone OK',User);
.catch(错误=>{
console.log('无效代码',错误消息);
});
};
{
使用电话号码登录(props.telNum);
}}>
使用电话号码登录
const signInWithPhoneNumber=电话号码=>{
auth()
.signInWithPhoneNumber(电话号码)
。然后(confirmResult=>{
log('User successfully authorized via telNum');
SetObjConfig(确认结果);
})
.catch(错误=>{
Alert.Alert('无效电话号码',错误消息);
console.log('无效电话号码',错误消息);
});
};

应该是这样的。你应该先通过确认阶段,然后你就会有代码确认按钮。我已经根据你从firebase链接的url重新组织了它

constMyPhoneAuthButton=props=>{
const[objConfirm,setObjConfirm]=useState(null);
const[code,setCode]=useState(“”);
//按按钮
const signInWithPhoneNumber=电话号码=>{
auth()
.signInWithPhoneNumber(电话号码)
。然后(confirmResult=>{
SetObjConfig(确认结果);
})
.catch(错误=>{
console.log('无效电话号码',错误消息);
});
};
const confirmCode=()=>{
对象确认
.确认(代码)
。然后(用户=>{
console.log('User auth by phone OK',User);
.catch(错误=>{
console.log('无效代码',错误消息);
});
};
const signInWithPhoneNumber=电话号码=>{
auth()
.signInWithPhoneNumber(电话号码)
。然后(confirmResult=>{
log('User successfully authorized via telNum');
SetObjConfig(确认结果);
})
.catch(错误=>{
Alert.Alert('无效电话号码',错误消息);
console.log('无效电话号码',错误消息);
});
};
如果(!objConfirm){
返回(
{
使用电话号码登录(props.telNum);
}}>
使用电话号码登录
)
}
返回(
设置代码(文本)}/>
confirmCode()}/>

)
你能链接你获取代码的url吗?我想再次检查一下原始帖子中添加的内容。我唯一改变的是使用
。然后()
而不是
async await
…因为使用
async await
它不允许我捕捉
错误你渲染确认按钮了吗?你可以显示你的渲染功能添加到原来的postHi@jamesmurphy吗,你在任何地方都不调用confirmCode函数。这个答案对我来说毫无意义…请澄清这是一个多么复杂的问题lution?显示您所做的一切都是复制了
signInWithPhoneNumber
功能,并删除了控制台日志和警报。可能我遗漏了什么??是的,您遗漏了。有两种状态下按钮应该出现。第一种状态是它控制是否OBJConfim,如果未确认,它将呈现按钮进行签名,否则它将显示已经确认,它将呈现文本输入和按钮,允许键入代码和提交。我刚刚比较了您编写的代码和您链接并回答的代码,并对缺少的部分进行了编码。我确实编写了根据类型呈现不同按钮的代码…..我只是没有在我的问题中保留,因为我不认为它相关/重要我想回答的问题是,当我使用实数而不是伪数时,为什么行为会有所不同