React Native 注销功能无法正常工作

时间:2021-06-07 14:03:40

标签: javascript reactjs react-native authentication logout

嘿,我正在 native-cli 中创建 react-native 应用程序。我正在尝试首次导航 5. 当我进行登录时,我收到令牌并将其存储在 AsyncStorage 中,但需要重新加载应用程序以移动到仪表板,因此为了解决这个问题,我使用了 useContext 及其工作正常,但现在问题是,当我登录应用程序并在它周围移动然后按下注销按钮时它工作得很好但是当我登录应用程序时浏览应用程序然后按后退按钮转到手机的主屏幕而不注销然后当我回来时再次返回应用程序并按注销它清除 AsyncStorge 但不注销应用程序,我需要刷新然后它返回到登录屏幕。

App.js

const App = () => {
  const [user, setUser] = useState(false)
  const [log, setLog] = useState(0)
  const [role, setRole] = useState('seller')
    //console.log('App.js-Start')
  console.log("app_User:",user);
  console.log("app_log:",log);
  useEffect(()=>{ 
    getKeysData(dataKeys)
  },[]) 
  const dataKeys = ['token', 'super_user_status', 'isLoggedIn'];    
  const getKeysData = async (keys) => {
    const stores = await AsyncStorage.multiGet(keys);
    //console.log(stores)
    // const aData = stores.map(([key, value]) => ({ [key]: value }))
    const aData = await Promise.all(stores.map(([key, value]) => ({[key]: value})))
    const token = aData[0]['token']
    const super_user_status = aData[1]['super_user_status']
    const isLoggedIn = aData[2]['isLoggedIn']
    console.log('token',token)
    console.log('SuperUser', super_user_status)
    console.log('Log',isLoggedIn)
    //setUser(isLoggedIn)
      if(isLoggedIn == 1){
        setLog(1)
      }
    
    }

  return (
    <NavigationContainer>
      <LoginContext.Provider value={{user,setUser}} >
      { user == false && log==0  ?
        <AuthStackScreen />
        :
        <BuyerDashboardStackScreens /> 
      }
      </LoginContext.Provider>
    </NavigationContainer>
  );
};
export default App;

登录

 await axios({
                method: 'POST',
                url: api + 'login/',
                data: login_Credentials,
                headers: { 'Content-Type': 'multipart/form-data' }
            }).then(async function (response) {
                if (response.data.success == true) {
                    const token = response.data.token.toString();
                    const super_user_status = response.data.super_user_status.toString();
                    const isLoggedIn = "1"
                    //console.log('Logged In and set Storgae')
                    await AsyncStorage.multiSet([['isLoggedIn',isLoggedIn],['token', token], ['super_user_status', super_user_status]])
                    setUser(true)
                    setEmail('')
                    setPassword('')
                    setPress(false)
                } 

退出

  const logOut = () => {
    AsyncStorage.clear();
    setUser(false);
  };

0 个答案:

没有答案