Запомнить меня с избыточным хранилищем - PullRequest
1 голос
/ 26 марта 2020

У меня userDetails в redux store, и я использовал redux persist с redux storage, чтобы сохранить детали после загрузки страницы или после закрытия моего приложения.

Проблема в том, что когда я вошел в систему и Я не checked rememberMe в индексе. js проверяется, если !rememberMe, и делаю logOut() сразу после login.

Так что мне нужно проверить только на входе в приложение в первый раз, и если !rememberMe я позвоню logOut(), но если userDetails !== 'emepty' && rememberMe я сделаю login() для получения действительного token.

Почему мне нужно проверить это оно в первый раз? потому что мне нужно сбросить uesrDetails на данные гостя, если !rememberMe.

Это мой индекс. js:

const setBeforeLists = useCallback(
    (lists) => {
        beforeListsChanged(lists);
    },
    [beforeListsChanged]
);

const setUserDetails = useCallback(
    (userDetails) => {
        userDetailsChanged(userDetails);
    },
    [userDetailsChanged]
);

useEffect(() => {
//userDetails.id === 'empty' is guest.
   if (
        userDetails.id !== 'empty' &&
        !userDetails.rememberMe
        ) {
            logOut(setUserDetails, setBeforeLists);
        }
    }, [
        setBeforeLists,
        setUserDetails,
        userDetails
]);

1 Ответ

0 голосов
/ 27 марта 2020

Когда вы обновите sh приложение, магазин будет сброшен. Токен исчез. Как мы и ожидали.

Итак, мы не можем использовать состояние для хранения токена аутентификации. Это то место, где AsyncStorage выходит на сцену.

Я отвечаю на приложение с естественной реакцией. Если это веб-приложение, используйте хранилище сеансов.

Давайте импортируем AsyncStorage в проект React Native:

import { AsyncStorage } from "react-native";

Затем давайте создадим две функции, setToken и getToken, для хранения и извлечения постоянных данных. Это основные методы этого урока. Здесь мы храним и получаем пользовательские данные из / в AsyncStorage.

async storeToken(user) {
    try {
       await AsyncStorage.setItem("userDetails", JSON.stringify(user));
    } catch (error) {
      console.log("Something went wrong", error);
    }
  }
  async getToken(user) {
    try {
      let userDetails = await AsyncStorage.getItem("userDetails");
      let data = JSON.parse(userDetails);
      console.log(data);
    } catch (error) {
      console.log("Something went wrong", error);
    }
  }

componentDidMount() {
   this.getToken();
}

Давайте докажем это. После этого токен вы закрываете и снова открываете приложение. Попробуйте сами. Теперь наше приложение автоматически регистрирует вас после каждого сеанса.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...