Для входа пользователя с токеном вы можете использовать AsyncStorage, сервис, являющийся частью React Native, который позволяет нам хранить небольшие фрагменты данных в телефоне пользователя.
Таким образом, даже если пользователь закрывает приложение или выключает свое мобильное устройство, что приводит к сбросу информации из нашего магазина Redux, который находится в памяти JavaScript, где нет постоянства, мы можем увидеть, если токен существует, глядя в AsyncStorage.
Таким образом, если пользователь войдет в систему хотя бы один раз и токен будет сохранен в AsyncStorage, это позволит вам сохранить токен от различных применений или перезагрузок вашего приложения. Таким образом, чтобы импортировать его, выглядело бы что-то вроде этого, например:
import { AsyncStorage } from "react-native";
import { FACEBOOK_LOGIN_SUCCESS } from "./types";
export const facebookLogin = () => {};
AsyncStorage
работает немного как localStorage в вашем браузере. AsyncStorage
предоставляет две разные функции, первая называется AsyncStorage.setItem();
. Это может содержать определенный ключ в качестве первого аргумента и часть данных, которые мы хотим сохранить в качестве второго аргумента, AsyncStorage.setItem('fb_token', token);
. Вторая функция - AsyncStorage.getItem();
, и мы передаем ключ, под которым вы ее предварительно сохранили, AsyncStorage.getItem('fb_token');
.
Когда вы хотите сохранить элемент на устройстве, вы говорите, что здесь есть токен и строка, чтобы указать, под каким ключом мы хотим сохранить его.
Ключ позволяет нам иметь отдельное хранилище для сохранения в уникальном месте и извлекать его позже, взглянув на тот же самый точный ключ, на примере 'fb_token'
.
AsyncStorage
ведет себя немного иначе, чем localStorage, в том смысле, что это асинхронная операция, поэтому считывание его из хранилища занимает некоторое время.
AsyncStorage
вернет Обещание после извлечения или успешного сохранения записи. Поэтому ваш код должен быть настроен на работу с Promises при получении или сохранении с помощью AsyncStorage
.
Теперь я использую вход в Facebook в качестве примера в своем коде, чтобы подчеркнуть, что если вы используете аутентификацию сторонних сервисов, таких как Facebook, вы будете иметь дело с еще некоторыми Обещаниями в дополнение к AsyncStorage
один.
Дело в том, что ваш код может очень быстро запутаться. Чтобы справиться с этим, вы можете использовать синтаксис ES7 Async / Await, который используется для изящной обработки обещаний.
Итак, с синтаксисом .then()
он начал бы выглядеть так:
asynchronousOperation = () => {
myRequest().then((result) => console.log(result));
}
С синтаксисом Async / Await это будет выглядеть так:
asynchronousOperation = async () => {
let result = await myRequest();
console.log(result);
}
Таким образом, на практике все началось бы с вашего создателя действия:
import { AsyncStorage } from "react-native";
import { FACEBOOK_LOGIN_SUCCESS } from "./types";
export const facebookLogin = () => {
let token = await AsyncStorage.getItem("fb_token");
if (token) {
// Dispatch an action saying FB login is successful
} else {
// Start up Facebook login process
}
};
Теперь создатели действий предполагают, что вы возвращаете объект действия немедленно, верно, но AsyncStorage
является асинхронным по своей природе, поэтому нам нужно что-то вроде Redux Thunk, что на практике это будет выглядеть так:
import { AsyncStorage } from "react-native";
import { FACEBOOK_LOGIN_SUCCESS } from "./types";
export const facebookLogin = () => async dispatch => {
let token = await AsyncStorage.getItem("fb_token");
if (token) {
// Dispatch an action saying FB login is successful
} else {
// Start up Facebook login process
}
};