Please refer to the official redux-persist
documentation and then when creating your persistConfig add the following lines:
const persistConfig = {
// ...
storage: KeychainStorage,
// ...
};
Please refer to the official redux-persist
documentation and then when creating your persistConfig add the following lines:
const persistConfig = {
// ...
storage: KeychainStorage,
// ...
};
import AsyncStorage from '@react-native-community/async-storage'; | |
import { | |
setGenericPassword, | |
getGenericPassword, | |
resetGenericPassword, | |
} from 'react-native-keychain'; | |
const KeychainStorage = { | |
async getAllKeys(cb) { | |
try { | |
const keys = await AsyncStorage.getAllKeys(); | |
if (cb) { | |
cb(undefined, keys); | |
} | |
return keys; | |
} catch (err) { | |
cb(err); | |
throw err; | |
} | |
}, | |
async getItem(key, cb) { | |
try { | |
const sharedWebCredentials = await getGenericPassword({service: key}); | |
// Check getGenericPassword documentation https://git.io/JffKK | |
if (typeof sharedWebCredentials === 'boolean') { | |
throw new Error('entry does not exist'); | |
} | |
const {password} = sharedWebCredentials; | |
if (cb) { | |
cb(undefined, password); | |
} | |
return password; | |
} catch (err) { | |
if (cb) { | |
cb(err); | |
} | |
throw err; | |
} | |
}, | |
async setItem(key, value, cb) { | |
try { | |
await Promise.all([ | |
AsyncStorage.setItem(key, key), | |
setGenericPassword('user', value, {service: key}), | |
]); | |
await setGenericPassword('user', value, {service: key}); | |
if (cb) { | |
cb(undefined); | |
} | |
} catch (err) { | |
if (cb) { | |
cb(err); | |
} | |
throw err; | |
} | |
}, | |
async removeItem(key, cb) { | |
try { | |
await Promise.all([ | |
AsyncStorage.removeItem(key), | |
resetGenericPassword({service: key}), | |
]); | |
if (cb) { | |
cb(undefined); | |
} | |
} catch (err) { | |
if (cb) { | |
cb(err); | |
} | |
throw err; | |
} | |
}, | |
}; | |
export default KeychainStorage; |
import AsyncStorage from '@react-native-community/async-storage'; | |
import { | |
setGenericPassword, | |
getGenericPassword, | |
resetGenericPassword, | |
} from 'react-native-keychain'; | |
type Callback = (err?: Error, keys?: string | string[]) => void; | |
const KeychainStorage = { | |
async getAllKeys(cb: Callback) { | |
try { | |
const keys = await AsyncStorage.getAllKeys(); | |
if (cb) { | |
cb(undefined, keys); | |
} | |
return keys; | |
} catch (err) { | |
cb(err); | |
throw err; | |
} | |
}, | |
async getItem(key: string, cb: Callback) { | |
try { | |
const sharedWebCredentials = await getGenericPassword({service: key}); | |
// Check getGenericPassword documentation https://git.io/JffKK | |
if (typeof sharedWebCredentials === 'boolean') { | |
throw new Error('entry does not exist'); | |
} | |
const {password} = sharedWebCredentials; | |
if (cb) { | |
cb(undefined, password); | |
} | |
return password; | |
} catch (err) { | |
if (cb) { | |
cb(err); | |
} | |
throw err; | |
} | |
}, | |
async setItem(key: string, value: string, cb: Callback) { | |
try { | |
await Promise.all([ | |
AsyncStorage.setItem(key, key), | |
setGenericPassword('user', value, {service: key}), | |
]); | |
await setGenericPassword('user', value, {service: key}); | |
if (cb) { | |
cb(undefined); | |
} | |
} catch (err) { | |
if (cb) { | |
cb(err); | |
} | |
throw err; | |
} | |
}, | |
async removeItem(key: string, cb: Callback) { | |
try { | |
await Promise.all([ | |
AsyncStorage.removeItem(key), | |
resetGenericPassword({service: key}), | |
]); | |
if (cb) { | |
cb(undefined); | |
} | |
} catch (err) { | |
if (cb) { | |
cb(err); | |
} | |
throw err; | |
} | |
}, | |
}; | |
export default KeychainStorage; |