I am using Firebase
to authenticate users for my application. I have created the SignIn
and SignUp
forms and can successfully create new users and sign in with stored users. However the issue comes with maintaining the user logged in state after a Reload
.
The way I have seen it done in tutorials is to use a HOC
like the following to check if the current user is logged in.
const withAuthentication = Component => {
class WithAuthentication extends React.Component {
constructor(props) {
super(props);
this.state = {
authUser: null,
};
}
componentDidMount() {
this.listener = this.props.firebase.auth.onAuthStateChanged(
authUser => {
authUser
? this.setState({ authUser })
: this.setState({ authUser: null });
},
);
}
componentWillUnmount() {
this.listener();
}
render() {
return (
<AuthUserContext.Provider value={this.state.authUser}>
<Component {...this.props} />
</AuthUserContext.Provider>
);
}
}
return withFirebase(WithAuthentication);
};
export default withAuthentication;
However I am looking to use the new React
Hooks
to remove the need for HOCs
. I have already removed the withFirebase()
HOC
by using the React Context
and useContext(FirebaseContext)
to access a single instance of Firebase
. Is there a way using the new hooks
to mimic this withAuthentication
HOC
within components
that I create?
I am using this tutorial
https://www.robinwieruch.de/complete-firebase-authentication-react-tutorial/
The section titled "Session Handling with Higher-Order Components" contains this part.
Thanks!