В настоящее время я работаю над проектом next.js, использующим реагирование, редукс и firebase.Когда пользователь заходит на страницу, требующую авторизации, я использую следующий код, чтобы перенаправить их, если они не аутентифицированы.
import React from 'react';
import Router from 'next/router';
import { firebase } from '../../firebase';
import * as routes from '../../constants/routes';
const withAuthorization = (needsAuthorization) => (Component) => {
class WithAuthorization extends React.Component {
componentDidMount() {
firebase.auth.onAuthStateChanged(authUser => {
if (!authUser && needsAuthorization) {
Router.push(routes.SIGN_IN)
}
});
}
render() {
return (
<Component { ...this.props } />
);
}
}
return WithAuthorization;
}
export default withAuthorization;
Я использую следующее репо в качестве базового проекта.Проблема в том, что приложение работает нормально, но когда я пытаюсь перейти на страницу, требующую аутентификации, когда я не аутентифицирован.Я не перенаправлен сразу, скорее, сначала показывает страницу, а затем перенаправляет.Поскольку HOC использует
firebase.auth.onAuthStateChanged()
, что является асинхронным.Есть ли более быстрый способ проверки, вошел ли пользователь в систему?
Я до сих пор рассматривал
firebase.auth().currentUser
, но мое внутреннее состояние зависит от обновления функции onAuthStateChanged, когда пользовательвыходит из системы на другой странице.