diff --git a/src/App.js b/src/App.js index d00ff6d..7bdf159 100644 --- a/src/App.js +++ b/src/App.js @@ -1,4 +1,4 @@ -import React, { useState, useContext } from "react"; +import React, { useState, useContext, useEffect } from "react"; import { NavigationContainer } from "@react-navigation/native"; import navigationTheme from "./app/navigation/navigationTheme"; @@ -7,23 +7,38 @@ import openDatabase from "./app/database/database-connection"; import initDatabase from "./app/database/database-init"; import FlashMessage from "react-native-flash-message"; -import { createStackNavigator } from "@react-navigation/stack"; import AppNavigator from "./app/navigation/AppNavigator"; import EventLocationProvider from "./app/context/EventLocationContext"; import CurrentLocationProvider from "./app/context/CurrentLocationContext"; import AuthNavigator from "./app/navigation/AuthNavigator"; -import { AuthContextProvider } from "./app/auth/context"; +import { AuthContext } from "./app/auth/context"; +import authStorage from "./app/auth/storage"; +import jwtDecode from "jwt-decode"; export default function App() { - const [user, AuthProvider] = AuthContextProvider(); - console.log("asidhisdhaisu " + JSON.stringify(user)); + const [user, setUser] = useState(); + + const restoreToken = async () => { + const token = await authStorage.getToken(); + if (!token) return; + + return setUser(jwtDecode(token)); + }; + + useEffect(() => { + restoreToken(); + }, []); global.userDataBase = openDatabase(); initDatabase(global.userDataBase); - const Stack = createStackNavigator(); return ( - + @@ -32,6 +47,6 @@ export default function App() { - + ); } diff --git a/src/app/api/auth.js b/src/app/api/auth.js index fa9581c..4976cec 100644 --- a/src/app/api/auth.js +++ b/src/app/api/auth.js @@ -2,9 +2,9 @@ function login(name, password) { // NOTE: Change to API in future return { - name: "Fulano De Tal", - email: "fulano@detal.com", - ID: "1", + ok: true, + data: + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiRnVsYW5vIGRlIFRhbCIsImVtYWlsIjoiZnVsYW5vLmRlLnRhbEBib2wuY29tLmJyIiwiSUQiOiIxIn0.5435hPLABKVcejsZokCGG77G6xjBUcKAU_lAjELzT3g", }; } diff --git a/src/app/auth/context.js b/src/app/auth/context.js index 51a59d6..1ce8d2c 100644 --- a/src/app/auth/context.js +++ b/src/app/auth/context.js @@ -2,21 +2,21 @@ import React, { useState } from "react"; const AuthContext = React.createContext(); -function AuthContextProvider() { - const [user, setUser] = useState(); +// function AuthContextProvider() { +// const [user, setUser] = useState(); - const provider = ({ children }) => ( - - {children} - - ); +// const provider = ({ children }) => ( +// +// {children} +// +// ); - return [user, provider]; -} +// return [user, setUser, provider]; +// } -export { AuthContextProvider, AuthContext }; +export { AuthContext }; diff --git a/src/app/auth/storage.js b/src/app/auth/storage.js new file mode 100644 index 0000000..8af5ba1 --- /dev/null +++ b/src/app/auth/storage.js @@ -0,0 +1,29 @@ +import * as SecureStore from "expo-secure-store"; + +const key = "authToke"; + +const setToken = async (authToken) => { + try { + await SecureStore.setItemAsync(key, authToken); + } catch (error) { + console.log("Error while storing authToken"); + } +}; + +const getToken = async () => { + try { + return await SecureStore.getItemAsync(key); + } catch (error) { + console.log("Error while gettig authToken"); + } +}; + +const removeToken = async () => { + try { + await SecureStore.deleteItemAsync(key); + } catch (e) { + console.log("Error while removing authToken"); + } +}; + +export default { setToken, getToken, removeToken }; diff --git a/src/app/screens/AccountScreen.js b/src/app/screens/AccountScreen.js index c18c446..c6f3e68 100644 --- a/src/app/screens/AccountScreen.js +++ b/src/app/screens/AccountScreen.js @@ -3,6 +3,12 @@ import { Text, Button } from "react-native"; import Screen from "../components/Screen"; import InDevelopment from "../components/InDevelopment"; import { AuthContext } from "../auth/context"; +import authStorage from "../auth/storage"; + +function handleLogOut(setUser) { + setUser(null); + authStorage.removeToken(); +} function AccountScreen(props) { const { user, setUser } = useContext(AuthContext); @@ -18,7 +24,9 @@ function AccountScreen(props) {