From 6aa3bf3068d60f5ffac5af43ed98175e4735903f Mon Sep 17 00:00:00 2001 From: Ivan Chen Date: Mon, 2 Nov 2020 13:23:04 -0500 Subject: added async storage login for userid and username (#89) --- src/routes/authentication/AuthProvider.tsx | 27 +++++++++++++++++++++++---- src/screens/onboarding/Login.tsx | 23 ++++++++++++----------- 2 files changed, 35 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/routes/authentication/AuthProvider.tsx b/src/routes/authentication/AuthProvider.tsx index 55a6f3ad..383b4d5b 100644 --- a/src/routes/authentication/AuthProvider.tsx +++ b/src/routes/authentication/AuthProvider.tsx @@ -4,19 +4,19 @@ import {INTEGRATED_SOCIAL_LIST} from '../../constants'; import { loadAvatar, loadCover, + loadFollowers, + loadFollowing, + loadMoments, loadProfileInfo, loadRecentlySearchedUsers, loadSocialPosts, - loadMoments, - loadFollowers, - loadFollowing, } from '../../services'; import { + MomentType, ProfilePreviewType, ProfileType, SocialAccountType, UserType, - MomentType, } from '../../types'; interface AuthContextProps { @@ -98,6 +98,23 @@ const AuthProvider: React.FC = ({children}) => { const [following, setFollowing] = useState>([]); const [followersNeedUpdate, setFollowersNeedUpdate] = useState(true); const {userId} = user; + + useEffect(() => { + const loadUserInfoFromStorage = async () => { + const [id, username, token] = await Promise.all([ + AsyncStorage.getItem('userId'), + AsyncStorage.getItem('username'), + AsyncStorage.getItem('token'), + ]); + if (id && username && token) { + setUser({...user, userId: id, username}); + } + }; + if (user === NO_USER) { + loadUserInfoFromStorage(); + } + }, [user]); + useEffect(() => { if (!userId) { return; @@ -196,6 +213,8 @@ const AuthProvider: React.FC = ({children}) => { try { new Promise(() => { AsyncStorage.removeItem('token'); + AsyncStorage.removeItem('userId'); + AsyncStorage.removeItem('username'); }).then(() => { setUser(NO_USER); }); diff --git a/src/screens/onboarding/Login.tsx b/src/screens/onboarding/Login.tsx index 8ff7ebc2..3fe857cd 100644 --- a/src/screens/onboarding/Login.tsx +++ b/src/screens/onboarding/Login.tsx @@ -1,23 +1,22 @@ -import React, {useRef, useState} from 'react'; +import AsyncStorage from '@react-native-community/async-storage'; import {RouteProp} from '@react-navigation/native'; import {StackNavigationProp} from '@react-navigation/stack'; +import React, {useRef, useState} from 'react'; import { - View, - Text, Alert, - StatusBar, Image, - TouchableOpacity, - StyleSheet, KeyboardAvoidingView, Platform, + StatusBar, + StyleSheet, + Text, + TouchableOpacity, + View, } from 'react-native'; - -import {OnboardingStackParams} from '../../routes/onboarding'; +import {Background, SubmitButton, TaggInput} from '../../components'; +import {LOGIN_ENDPOINT, usernameRegex} from '../../constants'; import {AuthContext} from '../../routes/authentication'; -import {Background, TaggInput, SubmitButton} from '../../components'; -import {usernameRegex, LOGIN_ENDPOINT} from '../../constants'; -import AsyncStorage from '@react-native-community/async-storage'; +import {OnboardingStackParams} from '../../routes/onboarding'; import {UserType} from '../../types'; type VerificationScreenRouteProp = RouteProp; @@ -137,6 +136,8 @@ const Login: React.FC = ({navigation}: LoginProps) => { //Stores token received in the response into client's AsynStorage try { await AsyncStorage.setItem('token', data.token); + await AsyncStorage.setItem('userId', data.UserID); + await AsyncStorage.setItem('username', username); login(data.UserID, username); } catch (err) { setUser(NO_USER); -- cgit v1.2.3-70-g09d2