Я столкнулся с аналогичной проблемой с функцией onAuthStageChanged
.Однако, я думаю, это происходит потому, что вы звоните onAuthStageChanged
изнутри signInWithPhoneNumber
.
Всякий раз, когда вы успешно входите по указанному номеру телефона, вызывается функция onAuthStageChanged
.Однако, честно говоря, у меня нет хорошего объяснения того, как это исполнение происходит внутри if(user)
.В любом случае, я предполагаю, что из-за того, что вы уже выполнили вход с предыдущими попытками проверить приложение.
Таким образом, даже если пользователь никогда не входил в систему, функция успешного входа в систему запускается из-за вызова функции onAuthStageChanged
.Вы можете проверить это, используя приведенный ниже фрагмент кода.(Я не совсем знаком с thunk btw)
export const sampleFunc = () =>{
firebase.auth().onAuthStateChanged((user) => {
if (user) {
console.log('User signed in with just action call')
})
}
})
return(dispatch)=>{
// Required dispatches.
}
}
Так что, вызывая вышеупомянутую функцию из вашего класса, вы увидите User signed in with just action call
в консоли даже без каких-либо изменений этапа авторизации.
Потому чтоиз этого я просто вызываю onAuthStateChanged
функцию из ComponentDidMount в вашем классе.Таким образом, очевидно, что пользователь не подписан, когда компонент монтируется.Затем из if(user)
вызовите необходимые действия, чтобы сохранить данные и перейти к начальному экрану после успешного входа.
Итак, теперь, когда вы получаете сообщение,
iOS
onAuthStateChanged
не сработает, как говорит Firebase.Поэтому iOS должна следовать основному экрану ввода OTP и подтвердить его оттуда.
Android
Используя Сервисы Google Play, она автоматически распознает входящее сообщение и выполнит необходимые задачи для запуска.onAuthStateChanged
функция.Тогда, поскольку ComponentDidMount
уже инициализировал onAuthStateChanged
, это сработает и автоматически войдет в систему.