fix: ganti penyimpanan token dari AsyncStorage ke SecureStore

Token autentikasi kini disimpan di Keychain (iOS) / Keystore (Android)
sehingga otomatis terhapus saat uninstall dan tidak bisa dipulihkan
lewat Google Backup. @notification_permission tetap di AsyncStorage
karena bukan data sensitif.
This commit is contained in:
2026-05-11 17:11:05 +08:00
parent 7341f378dd
commit af2048b4cd
3 changed files with 9 additions and 4 deletions

View File

@@ -2,6 +2,7 @@ import { ConstEnv } from '@/constants/ConstEnv';
import { apiRegisteredToken, apiUnregisteredToken } from '@/lib/api';
import { getToken } from '@/lib/useNotification';
import AsyncStorage from '@react-native-async-storage/async-storage';
import * as SecureStore from 'expo-secure-store';
import { useQueryClient } from '@tanstack/react-query';
import CryptoES from "crypto-es";
import { router } from "expo-router";
@@ -35,7 +36,7 @@ export default function AuthProvider({ children }: { children: ReactNode }): Rea
useEffect(() => {
(async (): Promise<void> => {
const token = await AsyncStorage.getItem('@token');
const token = await SecureStore.getItemAsync('@token');
tokenRef.current = token || '';
setIsLoading(false);
})()
@@ -62,14 +63,14 @@ export default function AuthProvider({ children }: { children: ReactNode }): Rea
} catch (error) {
console.error(error)
} finally {
await AsyncStorage.setItem('@token', token);
await SecureStore.setItemAsync('@token', token);
tokenRef.current = token;
router.replace('/home')
return true
}
} else {
await apiRegisteredToken({ user: hasil, token: "" })
await AsyncStorage.setItem('@token', token);
await SecureStore.setItemAsync('@token', token);
tokenRef.current = token;
router.replace('/home')
}
@@ -87,7 +88,7 @@ export default function AuthProvider({ children }: { children: ReactNode }): Rea
} catch (error) {
console.error(error)
} finally {
await AsyncStorage.setItem('@token', '');
await SecureStore.deleteItemAsync('@token');
tokenRef.current = null;
queryClient.clear();
router.replace('/');