Spaces:
Sleeping
Sleeping
File size: 2,630 Bytes
bb8f662 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | import React, { createContext, useState, useContext, useEffect } from 'react';
import AsyncStorage from '@react-native-async-storage/async-storage';
const AuthContext = createContext({});
export const AuthProvider = ({ children }) => {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
loadUser();
}, []);
const loadUser = async () => {
try {
const userData = await AsyncStorage.getItem('user');
if (userData) {
setUser(JSON.parse(userData));
}
} catch (error) {
console.error('Error loading user:', error);
} finally {
setLoading(false);
}
};
const signIn = async (email, password) => {
try {
if (!email || !password) {
throw new Error('Email and password are required');
}
if (!email.includes('@')) {
throw new Error('Please enter a valid email address');
}
if (password.length < 4) {
throw new Error('Password must be at least 4 characters');
}
const userData = {
email: email,
name: email.split('@')[0],
picture: null,
};
setUser(userData);
await AsyncStorage.setItem('user', JSON.stringify(userData));
return { success: true };
} catch (error) {
console.error('Error signing in:', error);
throw error;
}
};
const signUp = async (email, password, confirmPassword) => {
try {
if (!email || !password || !confirmPassword) {
throw new Error('All fields are required');
}
if (!email.includes('@')) {
throw new Error('Please enter a valid email address');
}
if (password.length < 4) {
throw new Error('Password must be at least 4 characters');
}
if (password !== confirmPassword) {
throw new Error('Passwords do not match');
}
return await signIn(email, password);
} catch (error) {
console.error('Error signing up:', error);
throw error;
}
};
const signOut = async () => {
try {
await AsyncStorage.removeItem('user');
setUser(null);
} catch (error) {
console.error('Error signing out:', error);
}
};
return (
<AuthContext.Provider
value={{
user,
loading,
signIn,
signUp,
signOut,
isAuthenticated: !!user,
}}
>
{children}
</AuthContext.Provider>
);
};
export const useAuth = () => {
const context = useContext(AuthContext);
if (!context) {
throw new Error('useAuth must be used within AuthProvider');
}
return context;
}; |