diff options
Diffstat (limited to 'src/providers/AuthContext.js')
-rw-r--r-- | src/providers/AuthContext.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/providers/AuthContext.js b/src/providers/AuthContext.js new file mode 100644 index 0000000..a32fb01 --- /dev/null +++ b/src/providers/AuthContext.js @@ -0,0 +1,58 @@ +import React, { createContext, useEffect, useState } from 'react'; + +export const AuthContext = createContext(); + +export const AuthProvider = ({ children }) => { + const [user, setUser] = useState(null); + const [refreshToken, setRefreshToken] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const initializeAuth = async () => { + try { + const storedUser = localStorage.getItem('user'); + const storedRefreshToken = localStorage.getItem('refreshToken'); + if (storedUser && storedRefreshToken) { + setUser(JSON.parse(storedUser)); + setRefreshToken(storedRefreshToken); + } + } catch (error) { + console.error('Error initializing auth:', error); + } finally { + setLoading(false); + } + }; + + initializeAuth(); + }, []); + + const login = (userData, token) => { + setUser(userData); + setRefreshToken(token); + localStorage.setItem('user', JSON.stringify(userData)); + localStorage.setItem('refreshToken', token); + }; + + const logout = () => { + setUser(null); + setRefreshToken(null); + localStorage.removeItem('user'); + localStorage.removeItem('refreshToken'); + }; + + const authContextValue = { + user, + refreshToken, + login, + logout, + }; + + // Maybe make a loading screen animation/component to use? + return ( + <AuthContext.Provider value={authContextValue}> + {loading ? <div></div> : children} + </AuthContext.Provider> + ); +}; + +export default AuthProvider; |