我刚刚发现了gunDB,这个概念看起来非常有趣,我想在开始进一步评估它之前找到更多关于它的信息.
我一直在开发一些东西,你知道在早期的原型设计类型和表格变化很快......清理旧数据并在某些网格中重新开始会很好.
现在我使用示例HTTP服务器,所以我删除了data.json; 但我忘了浏览器中的localStorage也需要清除.
有人可能会认为你可以放(null)
我问了一下gitter并得到了
https://github.com/amark/gun/wiki/delete
除了删除,大声笑,我们的借口是"它的工作方式就像你的操作系统,当你删除>它只是扔进垃圾桶/回收站.这就是全部." 虽然比抱歉更安全
如果你试图"删除"东西,因为你在开发>某些东西时搞砸了,请按照以下三个步骤进行:1)在每个>浏览器选项卡中的localStorage.clear(),2)崩溃服务器和rm data.json ,3)重启>一切.你应该有一个干净的石板.通常情况下,当我发现某些内容时,我将localStorage.clear()置于代码的顶部,因此我只需要担心清除服务器.
我想创建一个microblog
每个人都可以阅读所有帖子的地方,但只有所有者可以删除或编辑帖子。在gundb
没有海中每个人都可以编辑或删除帖子,在sea( gun.user())
我必须共享公钥,在海中我如何获取所有用户的帖子并在时间轴中显示帖子?
我怎样才能用gundb创建这个?
我一直在关注你的项目很长一段时间,并且对gunDB的功能很感兴趣,它不需要中间的数据库并保持安全性.
但是,我有一些关于GunDB的问题,我已经考虑了很长一段时间了,之后我才能给Gun一个正在进行的项目.在这个项目中,数据是安全的,但是一旦设置了组,也应该是可共享的.该项目是一个移动应用程序项目,ata主要存储在SQLite数据库中的设备上.
我一直在研究Gun,因为它允许在协作方面更好地使用应用程序.但是,我的问题是:
用户认证
如何通过私钥处理用户身份验证?那么用户如何"注册"例如用户名和密码来登录该服务.
对于身份验证,我目前正在使用Firebase,可以使用用户名/密码身份验证,我想知道Gun是如何处理这种情况以及如何实现的.
数据存储
在文档和网站上,它声明数据存储在本地与每个客户端,并可以使用本地硬盘驱动器或Amazon S3存储选项存储在"节点"或服务器上.
我很好奇的是,客户端实际存储了哪些数据?这只是他/她可以访问的数据,还是整个数据集的副本,客户端只能访问他/她授予的访问权限?
维护您的数据
当我的生产系统运行大量数据时,我将如何管理我的数据流和/或帮助我的客户解决系统中存在的问题?
换句话说,如果我想要更新和/或为我的客户提供数据问题,我怎么能确保我能跟上系统.
我主要担心的是能否正确同步本地存储.
这些都是我现在的问题.
非常感谢您提前澄清这些主题.
最好的祝福,
我已经尝试 GunJs 几天了,我真的很喜欢它。作为一个入门项目,我关注了Fireship 聊天 dapp 视频,旨在构建您自己的聊天。
问题是,既然我已经完成了教程,我想创建自己的聊天。然而,由于某种原因,如果我在自己的应用程序中获得一个“聊天”节点,它似乎会在与在线教程相同的“聊天”节点上进行操作。
onMount(() => {
// Get Messages in large chat
db.get('chat')
.map()
.once(async (data, id) => {
if (data) {
// key for E2E - to do: change for web3
const key = '#foo';
var message = {
//transform the data
who: await db.user(data).get('alias'),
what: (await SEA.decrypt(data.what, key)) + '',
when: GUN.state.is(data, 'what'),
};
if (message.what) {
messages = [...messages.slice(-100), message]
}
}
})
})
Run Code Online (Sandbox Code Playgroud)
如果我更改加密密钥,情况也会如此(然后消息将变得未定义)。由此产生多个问题:
我已经开始使用 GunDB 并且我真的很喜欢它。我可以轻松创建复杂的关系,而不会出现与关系数据库或文档数据库相关的许多问题。
不幸的是,我遇到了一个看似简单的问题。
我已成功创建节点,但后来想要获取密钥,以便将它们嵌入到页面上。例如,在一个页面上我使用表单添加用户。然后,在另一个页面上,我想获取用户列表并创建一个选择输入,将其名称列为文本,将键列为值。
例如,在第一页我有类似的内容 -
var user1 = gun.get('user/1').put({name: user1});
var user1 = gun.get('user/2').put({name: user2});
var users = gun.get('users');
users.set(user1);
users.set(user2);
Run Code Online (Sandbox Code Playgroud)
在另一页上,我有类似的东西 -
var users = gun.get('users');
users.map().val(function(user) {
var userOption = document.createElement("option");
userOption.text = user.name;
userOption.value = user.key; // for example, though this does not work
userSelect.appendChild(userOption);
});
Run Code Online (Sandbox Code Playgroud)
后来,我想使用选项值,例如 -
var user = gun.get(selectedUserOption.value);
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不知道如何获得钥匙。它似乎在节点对象中保存为“#”,但我无法确定如何访问该值。
我正在玩gun.js
并且到目前为止我很喜欢它。客户端对我们来说安全吗(尤其是通话等)?gun
.put()
例如,如果我正在构建一个 React+Redux 应用程序,并且我的gun.put()
调用来自 thunk,那么安全吗?还是在服务器上执行 CRUD 操作并仅使用 Gun 客户端库来检索数据 ( .on()
) 并保持我的 redux 存储同步更好?
有没有办法只将 GUN 服务器设置为中继?换句话说,有没有办法确保数据仅是点对点共享的?服务器仅充当信号(类似 STUN)的服务器。在我完成的少数测试中,我似乎无法看到数据通过 P2P 传输,而且似乎只能通过枪服务器漏斗。
我想确保服务器上没有客户端数据库数据。显然,连接信息和可能的数据库名称将在那里。
谢谢你。
请帮助我了解 Gun 如何在有时断开连接的 P2P 网络中管理用户。
假设有两个 Gun 实例I1和I2,它们被配置为对等体,并且假设用户“doe”事先在 I1 或 I2 上不存在。假设在两个实例上创建了用户“doe” ,而 I1 和 I2 未连接。两次尝试都应该成功。为了方便讨论,我们将 I1 上的“doe”用户称为doe1,将 I2 上的用户称为doe2。
现在,当 I1 和 I2 连接时会发生什么?doe1和doe2是否被视为同一用户?是否取决于用户注册时提供的密码?
我的理解是,只要用户注册时给出的密码相同即可。这是合理的。但我最大的问题是,如果给他们提供不同的密码怎么办?
我认为在这种情况下,doe1 和 doe2 将被视为不同的用户......但是然后呢?I1和I2将如何处理这种情况?I1 会简单地拒绝 doe2 吗?反之亦然?或者这留给实施?
我们将非常感谢您的建议。谢谢。
安郎