upd: token device
Deskripsi
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
import { apiRegisteredToken, apiUnregisteredToken } from '@/lib/api';
|
||||
import { getToken, requestPermission } from '@/lib/useNotification';
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
import {router} from "expo-router";
|
||||
import {createContext, MutableRefObject, ReactNode, useCallback, useContext, useEffect, useRef, useState} from 'react';
|
||||
import CryptoES from "crypto-es";
|
||||
import { router } from "expo-router";
|
||||
import { createContext, MutableRefObject, ReactNode, useCallback, useContext, useEffect, useRef, useState } from 'react';
|
||||
|
||||
const AuthContext = createContext<{
|
||||
signIn: (arg0: string) => void;
|
||||
@@ -24,12 +26,12 @@ export function useAuthSession() {
|
||||
return useContext(AuthContext);
|
||||
}
|
||||
|
||||
export default function AuthProvider ({children}:{children: ReactNode}): ReactNode {
|
||||
const tokenRef = useRef<string|null>(null);
|
||||
export default function AuthProvider({ children }: { children: ReactNode }): ReactNode {
|
||||
const tokenRef = useRef<string | null>(null);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
|
||||
useEffect(() => {
|
||||
(async ():Promise<void> => {
|
||||
(async (): Promise<void> => {
|
||||
const token = await AsyncStorage.getItem('@token');
|
||||
tokenRef.current = token || '';
|
||||
setIsLoading(false);
|
||||
@@ -49,15 +51,39 @@ export default function AuthProvider ({children}:{children: ReactNode}): ReactN
|
||||
})
|
||||
|
||||
const signIn = useCallback(async (token: string) => {
|
||||
await AsyncStorage.setItem('@token', token);
|
||||
tokenRef.current = token;
|
||||
router.replace('/home')
|
||||
const hasil = await decryptToken(String(token))
|
||||
const permission = await requestPermission()
|
||||
if (permission) {
|
||||
const tokenDevice = await getToken()
|
||||
try {
|
||||
const register = await apiRegisteredToken({ user: hasil, token: String(tokenDevice) })
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
} finally {
|
||||
await AsyncStorage.setItem('@token', token);
|
||||
tokenRef.current = token;
|
||||
router.replace('/home')
|
||||
return true
|
||||
}
|
||||
} else {
|
||||
await AsyncStorage.setItem('@token', token);
|
||||
tokenRef.current = token;
|
||||
router.replace('/home')
|
||||
}
|
||||
}, []);
|
||||
|
||||
const signOut = useCallback(async () => {
|
||||
await AsyncStorage.setItem('@token', '');
|
||||
tokenRef.current = null;
|
||||
router.replace('/');
|
||||
try {
|
||||
const hasil = await decryptToken(String(tokenRef.current))
|
||||
const token = await getToken()
|
||||
const response = await apiUnregisteredToken({ user: hasil, token: String(token) })
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
} finally {
|
||||
await AsyncStorage.setItem('@token', '');
|
||||
tokenRef.current = null;
|
||||
router.replace('/');
|
||||
}
|
||||
}, []);
|
||||
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user