aboutsummaryrefslogtreecommitdiffstats
path: root/src/providers/AuthContext.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/providers/AuthContext.js')
-rw-r--r--src/providers/AuthContext.js58
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;