From the command prompt go to your app's root folder and execute:
tns plugin add nativescript-secure-storage
Want to dive in quickly? Check out the demo! Otherwise, continue reading.
You can run the demo app from the root of the project by typing npm run demo.ios.device
.
PRO TIP: Want to store objects instead of strings? Use JSON.stringify
with set
and JSON.parse
with get
.
"In order to GET something you first need to SET it."
-- Eddy Verbruggen
// require the plugin
var SecureStorage = require("nativescript-secure-storage").SecureStorage;
// instantiate the plugin
var secureStorage = new SecureStorage();
// async
secureStorage.set({
key: "foo",
value: "I was set at " + new Date()
}).then(
function(success) {
console.log("Successfully set a value? " + success);
}
);
// sync
var success = secureStorage.setSync({
key: "foo",
value: "I was set at " + new Date()
});
// require the plugin
import { SecureStorage } from "nativescript-secure-storage";
// instantiate the plugin
let secureStorage = new SecureStorage();
// async
secureStorage.set({
key: "foo",
value: "I was set at " + new Date()
}).then(success => console.log("Successfully set a value? " + success));
// sync
const success = secureStorage.setSync({
key: "foo",
value: "I was set at " + new Date()
});
Will return null
if not found.
// async
secureStorage.get({
key: "foo"
}).then(
function(value) {
console.log("Got value: " + value);
}
);
// sync
var value = secureStorage.getSync({
key: "foo"
});
// async
secureStorage.get({
key: "foo"
}).then(value => console.log("Got value: " + value));
// sync
const value = secureStorage.getSync({
key: "foo"
});
// async
secureStorage.remove({
key: "foo"
}).then(
function(success) {
console.log("Removed value? " + success);
}
);
// sync
var success = secureStorage.removeSync({
key: "foo"
});
// async
secureStorage.remove({
key: "foo"
}).then(success => console.log("Successfully removed a value? " + success));
// sync
const success = secureStorage.removeSync({
key: "foo"
});
// async
secureStorage.removeAll().then(
function(success) {
console.log("Removed value? " + success);
}
);
// sync
var success = secureStorage.removeAllSync();
// async
secureStorage.removeAll().then(success => console.log("Successfully removed a value? " + success));
// sync
const success = secureStorage.removeAllSync();
In your view:
<Button text="set secure value" (tap)="setSecureValue()"></Button>
In your @Component
:
import { SecureStorage } from "nativescript-secure-storage";
export class MyComponent {
secureStorage = new SecureStorage();
// a method that can be called from your view
setSecureValue() {
this.secureStorage.set({
key: 'myKey',
value: 'my value'
}).then(success => { console.log(success)});
}
}
By default the plugin uses kSecAttrAccessibleAlwaysThisDeviceOnly
access control to the keychain. This means that the keychain value can be accessed even if the device is locked. If you want to enahnce security and you do not need background access, or if you want to allow the value to be backed up and migrated to another device, you can use any of keys defined here and pass it when you create an instance of SecureStorage
, for example
declare const kSecAttrAccessibleWhenUnlockedThisDeviceOnly; // This is needed in case you don't have tns-platform-declarations module installed.
const secureStorage = new SecureStorage(kSecAttrAccessibleWhenUnlockedThisDeviceOnly);
- On iOS we're leveraging the KeyChain using the SAMKeychain library (on the Simulator
NSUserDefaults
), - On Android we're using Hawk library which internally uses Facebook conceal.
- Thanks, Prabu Devarrajan for adding the
deleteAll
function!