Как хранить токены в реакции родной?

Раньше я разрабатывал в android раньше, и я использовал SharePreference для хранения токенов пользователей. Есть ли что-нибудь такое, что доступно для реагирования как на ios, так и на android?

Ответ 1

Возможно, вы захотите использовать AsyncStorage

Изменить:

Для всех, кто указал, что AsyncStorage не является безопасным, пожалуйста, обратитесь к этой записи.

Ответ 2

Если вы используете create-react-native-app или exp, вы можете использовать Expo.SecureStore для хранения вашего токена.

import {SecureStore} from 'expo';

await SecureStore.setItemAsync('secure_token','sahdkfjaskdflas$%^&');
const token = await SecureStore.getItemAsync('secure_token');
console.log(token); // output: sahdkfjaskdflas$%^&

Подробности: https://docs.expo.io/versions/latest/sdk/securestore

Ответ 3

В дополнение к другому ответу вы можете рассмотреть возможность шифрования токена на пользовательском устройстве при его сохранении.

Поэтому, в дополнение к хранению через AsyncStorage, вы можете использовать что-то вроде: Reaction-native-keychain для шифрования на устройстве.

Ответ 4

использовать expo-secure-store

// to install it 'expo install expo-secure-store'

import * as SecureStore from 'expo-secure-store';

const setToken = async (token) => {
    await SecureStore.setItemAsync('secure_token', token);
};

const getToken = async () => {
    return await SecureStore.getItemAsync('secure_token');
};

setToken('#your_secret_token');
getToken().then(token => console.log(token)); // output '#your_secret_token'

Ответ 5

Попробуйте этот пример из React Native Expo

Примечание. Этот пример предназначен для незашифрованного использования, поэтому, если вы хотите использовать безопасное хранилище, посетите эту страницу для получения дополнительной информации https://docs.expo.io/versions/latest/sdk/securestore

Ссылка: незашифрованный https://reactnavigation.org/docs/en/auth-flow.html#set-up-our-navigators зашифрованный https://docs.expo.io/versions/latest/sdk/securestore

class SignInScreen extends React.Component {
  static navigationOptions = {
    title: 'Please sign in',
  };

  render() {
    return (
      <View>
        <Button title="Sign in!" onPress={this._signInAsync} />
      </View>
    );
  }

  _signInAsync = async () => {
    await AsyncStorage.setItem('userToken', 'abc');
    this.props.navigation.navigate('App');
  };
}

class HomeScreen extends React.Component {
  static navigationOptions = {
    title: 'Welcome to the app!',
  };

  render() {
    return (
      <View>
        <Button title="Show me more of the app" onPress={this._showMoreApp} />
        <Button title="Actually, sign me out :)" onPress={this._signOutAsync} />
      </View>
    );
  }

  _showMoreApp = () => {
    this.props.navigation.navigate('Other');
  };

  _signOutAsync = async () => {
    await AsyncStorage.clear();
    this.props.navigation.navigate('Auth');
  };
}

// More code like OtherScreen omitted for brevity