Это пример React Firebase Authentication , но он также должен работать с next.js
.
Основная идея заключается в создании компонента высшего порядка, который проверяет, является ли пользовательаутентифицируется и оборачивает все страницы вокруг этого:
import React from 'react';
const withAuthentication = Component => {
class WithAuthentication extends React.Component {
render() {
return <Component {...this.props} />;
}
}
return WithAuthentication;
};
export default withAuthentication;
Вы можете переопределить _app.js
и вернуть только <Component {...pageProps} />
, если пользователь аутентифицирован.
Вы можете сделать что-то вроде этого:
const withAuthorization = (needsAuthorization) => (Component) => {
class WithAuthorization extends React.Component {
state = { authenticated: null }
componentDidMount() {
firebase.auth.onAuthStateChanged(authUser => {
if (!authUser && needsAuthorization) {
Router.push(routes.SIGN_IN)
} else {
// authenticated
this.setState({ authenticated: true })
}
});
}
render() {
if (!this.state.authenticated) {
return 'Loading...'
}
return (
<Component { ...this.props } />
);
}
}
return WithAuthorization;
}
Лучше всего обработать это на сервере.