You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:14:09