Refactor authentication and user data handling in Index, Profile, and Schedule components to use token-based authentication and improve error handling
This commit is contained in:
@@ -9,28 +9,47 @@ const PRIMARY = '#A24BFA';
|
||||
const BG = '#0c0a0a';
|
||||
|
||||
export default function Profile() {
|
||||
const [fullName, setFullName] = useState('');
|
||||
const [email, setEmail] = useState('');
|
||||
const [userId, setUserId] = useState('');
|
||||
const [user, setUser] = useState<any>(null);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const router = useRouter();
|
||||
|
||||
useEffect(() => {
|
||||
(async () => {
|
||||
const name = await SecureStore.getItemAsync('fullName');
|
||||
const mail = await SecureStore.getItemAsync('email');
|
||||
const uid = await SecureStore.getItemAsync('userId');
|
||||
setFullName(name || '');
|
||||
setEmail(mail || '');
|
||||
setUserId(uid || '');
|
||||
})();
|
||||
fetchUser();
|
||||
}, []);
|
||||
|
||||
async function fetchUser() {
|
||||
setLoading(true);
|
||||
try {
|
||||
const token = await SecureStore.getItemAsync('token');
|
||||
if (!token) {
|
||||
throw new Error('Nincs elmentett token, kérlek jelentkezz be újra!');
|
||||
}
|
||||
const response = await fetch('https://menuapi.devbeni.lol/api/@me', {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Authorization': `Bearer ${token}`,
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
});
|
||||
const data = await response.json();
|
||||
if (!data || !data.data || !data.data.Data) {
|
||||
setUser(null);
|
||||
return;
|
||||
}
|
||||
setUser(data.data.Data);
|
||||
} catch (e) {
|
||||
setUser(null);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}
|
||||
|
||||
async function handleLogout() {
|
||||
await SecureStore.deleteItemAsync('cookie');
|
||||
await SecureStore.deleteItemAsync('userId');
|
||||
await SecureStore.deleteItemAsync('token');
|
||||
await SecureStore.deleteItemAsync('email');
|
||||
await SecureStore.deleteItemAsync('password');
|
||||
await SecureStore.deleteItemAsync('fullName');
|
||||
await SecureStore.deleteItemAsync('userId');
|
||||
router.replace('/');
|
||||
}
|
||||
|
||||
@@ -39,11 +58,13 @@ export default function Profile() {
|
||||
<Text style={styles.title}>Profil</Text>
|
||||
<View style={styles.card}>
|
||||
<Text style={styles.label}>Név:</Text>
|
||||
<Text style={styles.value}>{fullName}</Text>
|
||||
<Text style={styles.label}>Email:</Text>
|
||||
<Text style={styles.value}>{email}</Text>
|
||||
<Text style={styles.value}>{user?.FullName || '-'}</Text>
|
||||
<Text style={styles.label}>UserID:</Text>
|
||||
<Text style={styles.value}>{userId}</Text>
|
||||
<Text style={styles.value}>{user?.UserID || '-'}</Text>
|
||||
<Text style={styles.label}>Szerepkör:</Text>
|
||||
<Text style={styles.value}>{user?.RoleCode || '-'}</Text>
|
||||
<Text style={styles.label}>Étterem:</Text>
|
||||
<Text style={styles.value}>{user?.RestaurantName || '-'}</Text>
|
||||
<TouchableOpacity style={styles.logoutButton} onPress={handleLogout}>
|
||||
<Text style={styles.logoutText}>Kijelentkezés</Text>
|
||||
</TouchableOpacity>
|
||||
|
||||
Reference in New Issue
Block a user