- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 react-native-firebase
v5.6 在一个项目中。
目标:在注册流程中,我让用户输入他们的电话号码,然后我向该电话号码发送一个 OTP。我希望能够将用户输入的代码与 Firebase 发送的代码进行比较,以便能够进入注册的后续步骤。
问题:用户获取短信 OTP 和所有内容,但 phoneAuthSnapshot
firebase.auth().verifyPhoneNumber(number).on('state_changed', (phoneAuthSnapshot => {})
返回的对象,它没有为 firebase 发送的代码提供值,所以没有什么可以比较用户输入的代码。但是,verificationId
有一个值属性(property)。这是从上述方法返回的对象:
'Verification code sent', {
verificationId: 'AM5PThBmFvPRB6x_tySDSCBG-6tezCCm0Niwm2ohmtmYktNJALCkj11vpwyou3QGTg_lT4lkKme8UvMGhtDO5rfMM7U9SNq7duQ41T8TeJupuEkxWOelgUiKf_iGSjnodFv9Jee8gvHc50XeAJ3z7wj0_BRSg_gwlN6sumL1rXJQ6AdZwzvGetebXhZMb2gGVQ9J7_JZykCwREEPB-vC0lQcUVdSMBjtig',
code: null,
error: null,
state: 'sent'
}
firebase
.firestore()
.collection('users')
.where('phoneNumber', '==', this.state.phoneNumber)
.get()
.then((querySnapshot) => {
if (querySnapshot.empty === true) {
// change status
this.setState({ status: 'Sending confirmation code...' });
// send confirmation OTP
firebase.auth().verifyPhoneNumber(this.state.phoneNumber).on(
'state_changed',
(phoneAuthSnapshot) => {
switch (phoneAuthSnapshot.state) {
case firebase.auth.PhoneAuthState.CODE_SENT:
console.log('Verification code sent', phoneAuthSnapshot);
this.setState({ status: 'Confirmation code sent.', confirmationCode: phoneAuthSnapshot.code });
break;
case firebase.auth.PhoneAuthState.ERROR:
console.log('Verification error: ' + JSON.stringify(phoneAuthSnapshot));
this.setState({ status: 'Error sending code.', processing: false });
break;
}
},
(error) => {
console.log('Error verifying phone number: ' + error);
}
);
}
})
.catch((error) => {
// there was an error
console.log('Error during firebase operation: ' + JSON.stringify(error));
});
最佳答案
如 @christos-lytras曾在 their answer ,验证码不会暴露给您的应用程序。
这样做是出于安全原因,因为提供了用于 out of band authentication 的代码。设备本身将允许知识渊博的用户从内存中取出代码并进行身份验证,就好像他们有权访问该电话号码一样。
一般的操作流程是:
verifyPhoneNumber()
一起使用并缓存它返回的验证 ID firebase.auth.PhoneAuthProvider.credential(id, code)
将 ID 和用户的输入捆绑在一起作为凭证firebase.auth().signInWithCredential(credential)
on(event, observer, errorCb, successCb)
verifyPhoneNumber(phoneNumber)
的听众方法。但是这个方法也支持
listening to results使用 Promises,它允许您链接到您的 Firebase 查询。这如下所示。
firebase
.firestore()
.collection('users')
.where('phoneNumber', '==', this.state.phoneNumber)
.get()
.then((querySnapshot) => {
if (!querySnapshot.empty) {
// User found with this phone number.
throw new Error('already-exists');
}
// change status
this.setState({ status: 'Sending confirmation code...' });
// send confirmation OTP
return firebase.auth().verifyPhoneNumber(this.state.phoneNumber)
})
.then((phoneAuthSnapshot) => {
// verification sent
this.setState({
status: 'Confirmation code sent.',
verificationId: phoneAuthSnapshot.verificationId,
showCodeInput: true // shows input field such as react-native-confirmation-code-field
});
})
.catch((error) => {
// there was an error
let newStatus;
if (error.message === 'already-exists') {
newStatus = 'Sorry, this phone number is already in use.';
} else {
// Other internal error
// see https://firebase.google.com/docs/reference/js/firebase.firestore.html#firestore-error-code
// see https://firebase.google.com/docs/reference/js/firebase.auth.PhoneAuthProvider#verify-phone-number
// probably 'unavailable' or 'deadline-exceeded' for loss of connection while querying users
newStatus = 'Failed to send verification code.';
console.log('Unexpected error during firebase operation: ' + JSON.stringify(error));
}
this.setState({
status: newStatus,
processing: false
});
});
codeInputSubmitted(code) {
const { verificationId } = this.state;
const credential = firebase.auth.PhoneAuthProvider.credential(
verificationId,
code
);
// To verify phone number without interfering with the existing user
// who is signed in, we offload the verification to a worker app.
let fbWorkerApp = firebase.apps.find(app => app.name === 'auth-worker')
|| firebase.initializeApp(firebase.app().options, 'auth-worker');
fbWorkerAuth = fbWorkerApp.auth();
fbWorkerAuth.setPersistence(firebase.auth.Auth.Persistence.NONE); // disables caching of account credentials
fbWorkerAuth.signInWithCredential(credential)
.then((userCredential) => {
// userCredential.additionalUserInfo.isNewUser may be present
// userCredential.credential can be used to link to an existing user account
// successful
this.setState({
status: 'Phone number verified!',
verificationId: null,
showCodeInput: false,
user: userCredential.user;
});
return fbWorkerAuth.signOut().catch(err => console.error('Ignored sign out error: ', err);
})
.catch((err) => {
// failed
let userErrorMessage;
if (error.code === 'auth/invalid-verification-code') {
userErrorMessage = 'Sorry, that code was incorrect.'
} else if (error.code === 'auth/user-disabled') {
userErrorMessage = 'Sorry, this phone number has been blocked.';
} else {
// other internal error
// see https://firebase.google.com/docs/reference/js/firebase.auth.Auth.html#sign-inwith-credential
userErrorMessage = 'Sorry, we couldn\'t verify that phone number at the moment. '
+ 'Please try again later. '
+ '\n\nIf the issue persists, please contact support.'
}
this.setState({
codeInputErrorMessage: userErrorMessage
});
})
}
verifyPhoneNumber()
- React Native或 Firebase PhoneAuthProvider.credential(id, code)
- Firebase signInWithCredential()
- React Native或 Firebase react-native-confirmation-code-field
关于firebase - 如何使用 Firebase 的 'verifyPhoneNumber()' 确认电话 # 所有权而不使用 # 登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59779991/
我正在尝试从 Firebase 身份验证获取验证短信当我单击(验证我的电话号码)时,它崩溃并在 verifyPhoneNumber 行返回空引用请帮助我 我试过换电话号码找了很多也解决不了 priva
将库更新到 Gradle 文件后,我在尝试通过电话号码进行身份验证后遇到此错误。 --------- beginning of crash 2020-11-04 00:33:11.574 23042-
在我的应用程序中,我调用 verifyPhoneNumber 方法向用户发送短信验证码。然后,我推送另一个 View Controller ,其中包含验证发送给用户的短信的代码。该方法不返回错误并返回
我已经实现了 firebase 电话身份验证机制以使用以下方式登录用户代码: (window).FirebasePlugin.verifyPhoneNumber('+91'+this.phone, 6
升级后出现错误 Firebase 身份验证 (20.0.0) 电话身份验证的依赖项, PhoneAuthProvider.getInstance().verifyPhoneNumber() 依赖: i
我开发了cordova移动应用程序。我们将 otp 发送到电话号码。所以我们使用 firebase 插件发送 otp,我浏览了这个指南 fcm plugin . 我安装了这个插件 cordova 插件
错误“verifyPhoneNumber:completion 已弃用 PhoneAuthProvider.provider().verifyPhoneNumber(PhoneNum.text
我有一个 ionic 项目(由 Ionic CLI 创建)。我正在尝试将 firebase 的电话身份验证机制集成到登录用户中。根据不同的教程和指南,我知道我必须依赖一些分支,因为官方 firebas
我使用电子邮件和密码创建了一个 Firebase Auth 用户 用户登录 用户决定在他们的个人资料中添加电话号码 我调用 verifyPhoneNumber 以接收代码,调用 PhoneAuthPr
我正在使用 react-native-firebase v5.6 在一个项目中。 目标:在注册流程中,我让用户输入他们的电话号码,然后我向该电话号码发送一个 OTP。我希望能够将用户输入的代码与 Fi
我正在尝试实现 Firebase 电话号码身份验证。官方文档说我需要打电话 PhoneAuthProvider.getInstance().verifyPhoneNumber( phoneNu
作为 Firebase verifyPhoneNumber() 流程的一部分,Android 需要什么配置以及在哪里设置它来停止重新验证? See screen recording. 在浏览器中的机器
我是一名优秀的程序员,十分优秀!