我想创建一个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 服务器设置为中继?换句话说,有没有办法确保数据仅是点对点共享的?服务器仅充当信号(类似 STUN)的服务器。在我完成的少数测试中,我似乎无法看到数据通过 P2P 传输,而且似乎只能通过枪服务器漏斗。
我想确保服务器上没有客户端数据库数据。显然,连接信息和可能的数据库名称将在那里。
谢谢你。
我正在跟踪分布式/无服务器应用程序的 Gun/SEA 身份验证系统。当 Gun 用户经过身份验证时,此应用程序会将会话信息保存到本地存储。我遇到的一个问题是,当刷新页面或打开新选项卡时,我希望在会话有效时保持用户身份验证,并且由于 XSS 和物理安全原因,我不想将用户名和密码存储在本地存储中。目前这个问题有解决办法吗?我认为 sessionStorage 可能更好,但它仍然存在一些相同的安全问题:将用户名和密码存储在攻击者可能能够获取的地方,并且在打开新选项卡时需要用户登录。
请帮助我了解 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 吗?反之亦然?或者这留给实施?
我们将非常感谢您的建议。谢谢。
安郎
嗨伙计,
我正在进行 GunDB探索的第四天,在阅读文档和其他各种教程时,有一件事情是不确定的:存储以及我是否需要 Superpeer?
到目前为止,我看到的教程和演示要么在没有同行的情况下实例化枪,要么使用诸如gun = Gun( [https://gun-us.herokuapp.com/gun, https://foobar.herokuapp.com/gun ] ).
如果您想演示聊天或待办事项应用程序,在其中您想展示实时行为,包括在这些超级用户的帮助下对人们的网络浏览器进行 p2p 同步,我认为后者是不错的选择。我理解这个概念,它很棒,我喜欢它。
但是,由于我即将从 Firebase firestore 迁移我的 Sapper (Svelte) 应用程序(因为图形数据集的性质比集合和文档的层次结构更适合我的应用程序),我已经拥有大约 9 GB 的数据事实上,firestore 总是在线供客户同步,我在这一点上的大问题是,我如何使用 GunDB 在我拥有的地方构建等价物
我读过 AXE,我读过 RAD 以及它是 GunDB 节点部署的默认存储算法这一事实,我见过有一个可选的 AWS S3 存储适配器,我当然也读过关于(已计划但尚未准备好?)IPFS存储选项。
总而言之,我现在完全迷失和困惑如何在这一点上继续可用的存储和超级对等选项。
我知道传统的方法是将图像/视频文件存储在一个地方,然后将引用索引保存到db的表中。
现在我正在学习gundb,我可以很容易地存储键值json类型数据,但是由于它是去中心化的,所以如果我想创建一个聊天室应用程序,应该如何处理图像存储(例如:用户的头像)?
我也想知道是否可以使用gundb制作电影共享应用程序?
我需要在用户空间中交换私有数据。
\n因为gun.grantandgun.trust已被弃用,所以我遵循了这个例子:
https://gun.eco/docs/SEA#quickstart \n
<script src="https://cdn.jsdelivr.net/npm/gun/gun.js"></script>\n<script src="https://cdn.jsdelivr.net/npm/gun/sea.js"></script>\n<script>\n// var Gun = require(\'gun\'); // in NodeJS \n// require(\'gun/sea\');\nvar SEA = Gun.SEA;\n;(async () => {\nvar pair = await SEA.pair();\nvar enc = await SEA.encrypt(\'hello self\', pair);\nvar data = await SEA.sign(enc, pair);\nconsole.log(data);\nvar msg = await SEA.verify(data, pair.pub);\nvar dec = await SEA.decrypt(msg, pair);\nvar proof = await SEA.work(dec, pair);\nvar check = await SEA.work(\'hello self\', pair);\nconsole.log(dec);\nconsole.log(proof === check);\n// now let\'s share private data with someone:\nvar alice = await SEA.pair();\nvar bob …Run Code Online (Sandbox Code Playgroud)