- Notifications
You must be signed in to change notification settings - Fork35
redux-persist storage engine for react-native-sensitive-info
License
CodingZeal/redux-persist-sensitive-storage
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Storage engine to usereact-native-sensitive-info withredux-persist.
react-native-sensitive-info manages all data stored in Android Shared Preferences and iOS Keychain.
NOTE: Android Shared Preferences are not secure, but there isa branch of react-native-sensitive-info that uses the Android keystore instead of shared preferences. You can use that branch with redux-persist-sensitive-storage if you prefer.
You can install this package using eitheryarn ornpm. You will also need to install and linkreact-native-sensitive-info.
Using Yarn:
yarn add redux-persist-sensitive-storage react-native-sensitive-inforeact-native link react-native-sensitive-infoUsing npm:
npm install --save redux-persist-sensitive-storage react-native-sensitive-inforeact-native link react-native-sensitive-infoTo use redux-persist-sensitive-storage, create a sensitive storage instance usingcreateSensitiveStorage and thenconfigure redux-persist according toits documentation using your instance as the storage argument in the configuration.
createSensitiveStorage takes an optional set of configuration options. These are used to configure the keychain service (iOS) and shared preferences name (Android) that react-native-sensitive-info uses. Seetheir documentation for more information.
import{compose,applyMiddleware,createStore}from"redux";import{persistStore,persistCombineReducers}from"redux-persist";importcreateSensitiveStoragefrom"redux-persist-sensitive-storage";importreducersfrom"./reducers";// where reducers is an object of reducersconststorage=createSensitiveStorage({keychainService:"myKeychain",sharedPreferencesName:"mySharedPrefs"});constconfig={key:"root", storage,};constreducer=persistCombineReducers(config,reducers);functionconfigureStore(){// ...letstore=createStore(reducer);letpersistor=persistStore(store);return{ persistor, store};}
You may want to only persist some keys in secure storage, and persist other parts of your state in local storage. If that's the case, you can use redux-persist'sNested Persists support. Your configuration might look something like this:
import{AsyncStorage}from"react-native";import{combineReducers}from"redux";import{persistReducer}from"redux-persist";importcreateSensitiveStoragefrom"redux-persist-sensitive-storage";import{mainReducer,tokenReducer}from"./reducers";constsensitiveStorage=createSensitiveStorage({keychainService:"myKeychain",sharedPreferencesName:"mySharedPrefs"});constmainPersistConfig={key:"main",storage:AsyncStorage,blacklist:["someEphemeralKey"]};consttokenPersistConfig={key:"token",storage:sensitiveStorage};letrootReducer=combineReducers({main:persistReducer(mainPersistConfig,mainReducer),token:persistReducer(tokenPersistConfig,tokenReducer)});
Modify thepersistStore call as follows:
importcreateSensitiveStoragefrom"redux-persist-sensitive-storage";// ...persistStore(store,{storage:createSensitiveStorage(options)});
Here is a more complete example:
import{compose,applyMiddleware,createStore}from"redux";import{persistStore,autoRehydrate}from"redux-persist";importcreateSensitiveStoragefrom"redux-persist-sensitive-storage";conststore=createStore(reducer,compose(applyMiddleware(...),autoRehydrate()));persistStore(store,{storage:createSensitiveStorage({keychainService:"myKeychain",sharedPreferencesName:"mySharedPrefs"}););
About
redux-persist storage engine for react-native-sensitive-info
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors5
Uh oh!
There was an error while loading.Please reload this page.