【发布时间】:2018-07-18 15:58:32
【问题描述】:
我正在尝试在登录后使用应用程序的 PIN 用户集在我的 React 本机应用程序上加密 Realm。
用户登录应用程序,然后设置一个 PIN 码,用户将使用该 PIN 码与应用程序进行以下交互。我想用这个 PIN 作为加密密钥。
我看过关于 https://realm.io/docs/javascript/latest/#encryption Key Generation/Storage for react-native apps to encrypt realm db
知道我需要在打开数据库时添加加密密钥,但是如何将密钥传递给数据库选项。如果您能提出任何更好的方法,那就太好了。
这是我的流程,
确认PIN.js
import { insertUser, deleteUser } from '../../../databases/schemas';
savePin = (userPIN) => {
const newUser = {
id: 1,
userName: 'Here goes the user name',
pin: userPIN
}
deleteUser(1).then().catch((error) => {
console.log(error);
});
insertUser(newUser).then().catch((error) => {
alert(error);
});
}
schemas.js
export const userSchema = {
name: USER_SCHEMA,
primaryKey: 'id',
properties: {
id: 'int',
userName: 'string',
pin: 'string'
}
}
const databaseOptions = {
path: 'retailApp.realm',
schema: [ userSchema, appDataSchema],
schemaVersion: 0 //optional
//SHOULD I BE ADDING THE KEY HERE? IF SO HOW CAN I PASS THE KEY SET BY THE
//USER
}
export const insertUser = user => new Promise ((resolve, reject) => {
Realm.open(databaseOptions).then(realm => {
realm.write(() => {
realm.create(USER_SCHEMA, user);
resolve(user);
});
}).catch((error) => reject(error));
});
export const deleteUser = userID => new Promise((resolve, reject) => {
Realm.open(databaseOptions).then(realm => {
realm.write(() => {
let userToDelete = realm.objectForPrimaryKey(USER_SCHEMA, userID);
realm.delete(userToDelete);
resolve();
});
}).catch((error) => reject(error));
});
securityUtils.js
获取 base64Encoded 为 KEY 的代码(尚未测试其工作原理)
export const getBase64Encodedpin = pin => {
var utf8 = require('utf8');
var binaryToBase64 = require('binaryToBase64');
var text = pin;
var bytes = utf8.encode(text);
var base64Encoded = binaryToBase64(bytes);
return base64Encoded;
}
我希望能够在打开数据库时将此密钥传递给 schemas.js,您能否建议我如何做到这一点。
谢谢 回复
【问题讨论】:
-
寻找相同的!
标签: javascript react-native encryption realm realm-mobile-platform