У меня есть проблема с реагирующим-firebase (или firebase), из-за которой мое приложение не получает триггер после обновления токена аутентификации. Это в значительной степени та же проблема, что и [1], но они так и не опубликовали решение.
Итак, что происходит, так это то, что как на телефоне Android, так и на эмуляторе Android (без понятия о iOS), регистрация, вход в систему и выход из нее работают отлично, то есть слушатели правильно видят, когда я делаю logout()
и т. Д. Но слушатели никогда не срабатывают при обновлении токена.
Мой первый вопрос: правильно ли я предположить, что onIdTokenChanged
-листер должен автоматически срабатывать через 60 минут без необходимости делать что-либо еще, например, вызвать любую функцию firebase, такую, чтобы приложение просто сидело без дела в течение 60 минут, а затем получило событие и заменило токен?
Мой основной компонент, содержащий слушателей, выглядит следующим образом:
class ReduxAppWrapper extends Component {
componentDidMount() {
firebase.auth().onAuthStateChanged((user) => {
console.log('COMP DID MOUNT: AUTH STATE CHANGED! ' + JSON.stringify(user));
});
firebase.auth().onIdTokenChanged((user) => {
console.log('COMP DID MOUNT: TOKEN CHANGED! ' + JSON.stringify(user));
});
firebase.auth().onUserChanged((user) => {
console.log('COMP DID MOUNT: USER CHANGED! ' + JSON.stringify(user));
});
};
render() {
return (
<ReduxProvider store={store}>
<MenuProvider>
<PaperProvider>
<AppContainer />
</PaperProvider>
</MenuProvider>
</ReduxProvider>);
}
}
Обычно внутри слушателя у меня есть функция, которая отправляет избыточное действие так, чтобы информация аутентификации передавалась по моим компонентам. Внутри этих компонентов я использую токен jwt для http-запросов к своему бэкэнду.
Теперь бэкэнд, конечно, использует firebase для проверки этого токена (и именно здесь проблема возникает через 60 минут после получения устаревшего jwt), но я думаю, что я прав, предполагая, что проблема лежит в приложении, поскольку обновление не происходит.
Я был бы очень рад, если бы кто-то мог указать мне, где искать, я также попытался выяснить в консоли Firebase, было ли отправлено событие обновления токена, но я не смог ничего найти об этом.
Так в основном:
1) Правильно ли я предполагаю, что функция firebase.auth().onIdTokenChanged()
должна вызываться без каких-либо других действий? Или недостаточно определить слушателя один раз в главном компоненте (также учитывая тот факт, что другие экраны будут визуализироваться поверх этого из-за стека-навигации).
2) Если код в порядке, есть ли у вас какие-либо подсказки, где искать?
Большое спасибо!
[1] https://github.com/invertase/react-native-firebase/issues/531