From dcb757fc07c5e42fd5c49eba68dceb9d3ccb9f27 Mon Sep 17 00:00:00 2001 From: Kyle Gill Date: Wed, 27 Mar 2019 15:19:50 -0600 Subject: [PATCH] feat: session handling --- src/components/session/context.js | 5 +++ src/components/session/index.js | 4 ++ src/components/session/withAuthentication.js | 45 ++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 src/components/session/context.js create mode 100644 src/components/session/index.js create mode 100644 src/components/session/withAuthentication.js diff --git a/src/components/session/context.js b/src/components/session/context.js new file mode 100644 index 0000000..ea7a851 --- /dev/null +++ b/src/components/session/context.js @@ -0,0 +1,5 @@ +import React from "react"; + +const AuthUserContext = React.createContext(null); + +export default AuthUserContext; diff --git a/src/components/session/index.js b/src/components/session/index.js new file mode 100644 index 0000000..3c0e3e8 --- /dev/null +++ b/src/components/session/index.js @@ -0,0 +1,4 @@ +import AuthUserContext from "./context"; +import withAuthentication from "./withAuthentication"; + +export { AuthUserContext, withAuthentication }; diff --git a/src/components/session/withAuthentication.js b/src/components/session/withAuthentication.js new file mode 100644 index 0000000..aa05977 --- /dev/null +++ b/src/components/session/withAuthentication.js @@ -0,0 +1,45 @@ +import React from "react"; + +import AuthUserContext from "./context"; +import { withFirebase } from "../firebase"; + +const withAuthentication = Component => { + class WithAuthentication extends React.Component { + constructor(props) { + super(props); + + this.state = { + authUser: JSON.parse(localStorage.getItem("authUser")) + }; + } + + componentDidMount() { + this.listener = this.props.firebase.auth.onAuthStateChanged( + authUser => { + localStorage.setItem("authUser", JSON.stringify(authUser)); + this.setState({ authUser }); + }, + () => { + localStorage.removeItem("authUser"); + this.setState({ authUser: null }); + } + ); + } + + componentWillUnmount() { + this.listener(); + } + + render() { + return ( + + + + ); + } + } + + return withFirebase(WithAuthentication); +}; + +export default withAuthentication;