From 5f8878623005970ad71075dcf8fa4f091f1794be Mon Sep 17 00:00:00 2001 From: jjcm296 Date: Thu, 15 May 2025 21:13:29 -0600 Subject: [PATCH 1/4] fix: actualizar precio de premium --- frontend/screens/premium/screens/CardData.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/screens/premium/screens/CardData.js b/frontend/screens/premium/screens/CardData.js index 0ba551a..2e38ad8 100644 --- a/frontend/screens/premium/screens/CardData.js +++ b/frontend/screens/premium/screens/CardData.js @@ -176,7 +176,7 @@ const CardData = () => { ]) } > - Pagar $100.00 MXN + Pagar $99.00 MXN From f2b33b0db1038f6ec2faa73e1ce18e22b67399ca Mon Sep 17 00:00:00 2001 From: jjcm296 Date: Fri, 16 May 2025 00:49:36 -0600 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20restaurar=20sesi=C3=B3n=20usando=20r?= =?UTF-8?q?efresh=20token=20en=20SplashScreen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/screens/splashScreen/SplashScreen.js | 46 ++++++++++++++++--- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/frontend/screens/splashScreen/SplashScreen.js b/frontend/screens/splashScreen/SplashScreen.js index 1bef6d7..d3fe620 100644 --- a/frontend/screens/splashScreen/SplashScreen.js +++ b/frontend/screens/splashScreen/SplashScreen.js @@ -1,27 +1,59 @@ -import React, { useEffect, useRef } from 'react'; +import React, { useEffect, useRef, useContext } from 'react'; import { View, Text, StyleSheet, Animated, Image } from 'react-native'; import { useNavigation } from '@react-navigation/native'; import { LinearGradient } from 'expo-linear-gradient'; import * as SecureStore from 'expo-secure-store'; +import { jwtDecode } from 'jwt-decode'; +import { SessionContext } from '../../context/SessionContext'; +import { ApiRefreshAccessToken } from '../../api/ApiLogin'; export default function SplashScreen() { const navigation = useNavigation(); const progress = useRef(new Animated.Value(0)).current; + const { updateSessionFromToken } = useContext(SessionContext); + + const isTokenExpired = (decoded) => { + const now = Date.now() / 1000; + return decoded.exp < now; + }; useEffect(() => { const checkSession = async () => { - const token = await SecureStore.getItemAsync('accessToken'); + const accessToken = await SecureStore.getItemAsync('accessToken'); + const refreshToken = await SecureStore.getItemAsync('refreshToken'); Animated.timing(progress, { toValue: 1, duration: 5000, useNativeDriver: false, - }).start(() => { - if (token) { - navigation.replace('MainTabs'); - } else { - navigation.replace('Authentication'); + }).start(async () => { + if (accessToken) { + try { + const decoded = jwtDecode(accessToken); + if (!isTokenExpired(decoded)) { + updateSessionFromToken(accessToken, decoded); + navigation.replace('MainTabs'); + return; + } + } catch (e) { + } + } + + if (refreshToken) { + try { + const newTokenData = await ApiRefreshAccessToken(refreshToken); + if (newTokenData?.accessToken) { + await SecureStore.setItemAsync('accessToken', newTokenData.accessToken); + const decoded = jwtDecode(newTokenData.accessToken); + updateSessionFromToken(newTokenData.accessToken, decoded); + navigation.replace('MainTabs'); + return; + } + } catch (e) { + console.error('❌ Error al refrescar token:', e); + } } + navigation.replace('Login'); }); }; From 666b74997c8bf7e92ecf80bf2a875ef8bf618846 Mon Sep 17 00:00:00 2001 From: jjcm296 Date: Fri, 16 May 2025 01:49:29 -0600 Subject: [PATCH 3/4] fix:navigation corregido hacia Authentication --- frontend/screens/splashScreen/SplashScreen.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/screens/splashScreen/SplashScreen.js b/frontend/screens/splashScreen/SplashScreen.js index d3fe620..a93919b 100644 --- a/frontend/screens/splashScreen/SplashScreen.js +++ b/frontend/screens/splashScreen/SplashScreen.js @@ -35,7 +35,7 @@ export default function SplashScreen() { navigation.replace('MainTabs'); return; } - } catch (e) { + } catch (e) } } @@ -53,7 +53,9 @@ export default function SplashScreen() { console.error('❌ Error al refrescar token:', e); } } - navigation.replace('Login'); + + // Si no hay refreshToken o falló todo, ir al login + navigation.replace('Authentication'); }); }; @@ -122,4 +124,4 @@ const styles = StyleSheet.create({ height: '100%', backgroundColor: '#f6ce4b', }, -}); +}); \ No newline at end of file From a22aafa649d92c43cbc35d6b007e56386e860fae Mon Sep 17 00:00:00 2001 From: jjcm296 Date: Fri, 16 May 2025 01:57:18 -0600 Subject: [PATCH 4/4] . --- frontend/screens/splashScreen/SplashScreen.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/screens/splashScreen/SplashScreen.js b/frontend/screens/splashScreen/SplashScreen.js index a93919b..233a55d 100644 --- a/frontend/screens/splashScreen/SplashScreen.js +++ b/frontend/screens/splashScreen/SplashScreen.js @@ -35,7 +35,8 @@ export default function SplashScreen() { navigation.replace('MainTabs'); return; } - } catch (e) + } catch (e) { + // Token inválido o corrupto, continúa a usar refresh } }