React Native集成AWS Amplify时用户登录/注册验证后自动登出问题求助
问题根源与修复方案
我一眼就找到了导致自动登出的核心问题——就在你的drawer.js组件里!
1. 立即执行的登出函数
在DrawerItem的登出按钮部分,你写了:
onPress={signOut()}
这里的signOut()是立即调用函数,意味着当DrawerMenu组件渲染的时候(也就是用户跳转到首页时),这个函数就会自动执行,直接触发登出操作,把Redux的signedIn状态设为false,看起来就像是刚登录就自动登出了。
修复方法
把它改成传递函数引用(不立即调用),有两种写法:
- 直接传函数名(推荐,更简洁):
onPress={signOut} - 用箭头函数包裹(适合需要传参的场景):
onPress={() => signOut()}
这样只有当用户点击“Kirjaudu ulos”按钮时,才会执行登出逻辑。
2. 额外建议:同步Auth状态与Redux状态
为了避免后续出现类似的状态不一致问题,建议在DrawerMenu组件挂载时,检查实际的Auth用户状态,再同步到Redux中。比如添加useEffect钩子:
import { useEffect } from 'react'; // 在DrawerMenu组件内部 useEffect(() => { const checkAuthStatus = async () => { try { // 检查当前是否有已认证的用户 await Auth.currentAuthenticatedUser(); props.authActions.authAction(true); } catch (err) { // 没有已认证用户,更新状态为未登录 props.authActions.authAction(false); } }; checkAuthStatus(); }, []);
这一步能确保Redux的signedIn状态和Auth库的实际认证状态保持一致,避免因为状态不同步导致的异常行为。
验证修复效果
修改完drawer.js的onPress绑定后,重新测试登录和账户确认流程:
- 用户登录成功后跳转到首页,不会再自动登出
- 点击侧边栏的登出按钮,才会触发登出操作
内容的提问来源于stack exchange,提问作者Jukka Koivu
相关产品推荐
相关产品推荐

