- 版本:3.0.3
- GitHub: https://github.com/NativeScript/plugins
- NPM: https://npmjs.net.cn/package/%40nativescript%2Fsecure-storage
- 下载量
- 昨天: 104
- 上周: 787
- 上个月: 3569
@nativescript/secure-storage
在 iOS 上使用 SAMKeychain,在 Android 上使用 Hawk 实现安全存储。
npm install @nativescript/secure-storage
API
set
| setSync
// require the plugin
import { SecureStorage } from "@nativescript/secure-storage";
// instantiate the plugin
const 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()
});
get
| getSync
如果未找到,将返回 null
。
// async
secureStorage.get({
key: "foo"
}).then(value => console.log("Got value: " + value));
// sync
const value = secureStorage.getSync({
key: "foo"
});
remove
| removeSync
// async
secureStorage.remove({
key: "foo"
}).then(success => console.log("Successfully removed a value? " + success));
// sync
const success = secureStorage.removeSync({
key: "foo"
});
removeAll
| removeAllSync
// async
secureStorage.removeAll().then(success => console.log("Successfully removed a value? " + success));
// sync
const success = secureStorage.removeAllSync();
clearAllOnFirstRun
| clearAllOnFirstRunSync
如果您想在应用重新安装时清除数据,则可以使用这些函数。
这对于 iOS 来说非常有用,因为如果您通过此插件向密钥链写入某些内容,当应用被卸载时,这些数据 不会 被删除。因此,下次安装相同的应用时,它将在密钥链中找到这些数据。
因此,如果您想清除先前安装中的“残留”数据,请确保在调用此插件提供的其他方法之前运行这些方法之一。
// async
secureStorage.clearAllOnFirstRun().then(success => {
console.log(success ? "Successfully removed all data on the first run" : "Data not removed because this is not the first run");
});
// sync
const success = secureStorage.clearAllOnFirstRunSync();
isFirstRun
| isFirstRunSync
作为额外功能,您可以利用“首次运行”机制,在插件检测到这是首次运行(安装或安装-删除-重新安装后)时执行任何操作。
// sync
if (secureStorage.isFirstRunSync()) {
// do whatever you want
}
// async
secureStorage.isFirstRun().then(isFirst => {
// if isFirst is true, do whatever you like
});
iOS 安全++
默认情况下,该插件使用 kSecAttrAccessibleAlwaysThisDeviceOnly
访问控制密钥链。这意味着即使在设备锁定的情况下也可以访问密钥链值。如果您想增强安全性并且不需要后台访问,或者如果您想允许值被备份并迁移到其他设备,您可以使用以下链接中定义的任何密钥并当创建 SecureStorage
实例时传递它,例如
declare const kSecAttrAccessibleWhenUnlockedThisDeviceOnly; // This is needed in case you don't have tns-platform-declarations module installed.
const secureStorage = new SecureStorage(kSecAttrAccessibleWhenUnlockedThisDeviceOnly);
iOS 模拟器
目前,此插件默认在 iOS 模拟器 上使用 NSUserDefaults
。您可以通过向 SecureStorage
构造函数提供 disableFallbackToUserDefaults
来更改此行为。这样,在模拟器上就使用密钥链而不是 NSUserDefaults
。
如果您遇到类似于 issue_10 的问题,请考虑再次使用默认行为。
iOS 密钥链访问/应用组
您可以通过密钥链访问组或应用组在 iOS 应用/扩展之间共享秘密,有关详细信息,请参阅 此处。
要设置
-
通过在
app/App_Resources/iOS/<someName>.entitlements
文件中添加条目,将密钥链访问组权限添加到您的应用中。例如:
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.my.app.sharedgroup</string>
</array> -
然后,在您的应用中指定获取/设置值时的
accessGroup
属性。例如: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({
accessGroup:"<TeamID>.com.my.app.sharedgroup",
key: 'myKey',
value: 'my value'
}).then(success => { console.log(success)});
}
}
致谢
- 在 iOS 上,我们利用 SAMKeychain 库(在模拟器上
NSUserDefaults
), - 在 Android 上,我们使用 Hawk 库,该库内部使用 Facebook conceal。
- 感谢 Prabu Devarrajan 添加 deleteAll 函数!
- 感谢 Eddy Verbruggen 多年的服务和大作!
许可
Apache许可证版本2.0