【发布时间】:2018-07-09 14:45:07
【问题描述】:
我提前道歉 - 因为这个问题需要一些背景知识,这可能是冗长的:
我正在尝试构建一个与 PouchDb 脱机工作的应用程序。 PouchDb 将与 Cloudant 同步。
使用的技术: Hapi、SQL、Vue、Cloudant、PouchDb
我已经构建了一个小 hapi.js 服务来注册/验证用户。当“帐户所有者”注册时 - 他们将作为新用户添加到 SQL 数据库中。
使用 Cloudants API,我配置了一个新数据库(使用随机名称),并在数据库上设置了安全性,以便新用户可以访问。
我将安全性(数据库名称、用户名和密码)作为元数据保存回 SQL 数据库中的用户。
与此处非常相似的方法:https://www.bennadel.com/blog/3208-provisioning-cloudant-couchdb-databases-from-auth0-for-a-database-per-user-architecture-in-angular-2-4-1.htm(确实,我基于此)。
当“帐户所有者”登录时,查询 SQL DB - 检索元数据并将其发送到客户端 vue 应用程序。然后使用 Cloudant DB 名称、用户名和密码填充 PouchDB 远程字符串。
例如:
const remoteDB = new PouchDB(`https://${name}:${pass}@0000-0000-bluemix.cloudant.com/${DBname}`);
这一切都有效:PouchDB 可以与 Cloudant 对话 - 数据可以毫无问题地往返。
“帐户所有者”能够向其他人(“员工”)授予对其 cloudantDB 的读/写访问权限。当他们添加新的员工时,员工会添加到 SQL 数据库中。使用 cloudants API,我为该用户创建了新的安全凭证,以便他们可以访问数据库(我不创建新数据库)并将它们作为元数据保存到 SQL 数据库中的员工...
新员工收到一封电子邮件 - 他们在 SQL db 上设置了他们的用户名和密码,然后可以登录。Cloudant 元数据被拾取......等等...... PouchDB / Couchdb 相互交谈- 这也有效。
最初我有点担心将这个元/凭据发送到客户端 - 我想使用 JWT 或其他东西......但后来我看到了另一个问题的答案:
https://stackoverflow.com/a/30417620/714950
所以传递凭证似乎是它在 Pouch/Couch/Cloudant 等中的完成方式。老实说 - 我发现整个事情就像“魔法”一样 - 好得令人难以置信,而且我有点担心,因为我不太明白。我可能做错了什么。
现在回答我的问题:
我正在传递这些凭据 - 这安全吗?我将如何重置/超时用户名和密码。
当他们注销时,我会擦除 Pouch 中的数据吗?
用户可以“登录”并失去连接吗?当他们重新连接时,邮袋会同步吗?
如果 pouch 没有同步 - 他们注销(我擦除 Pouch),这是否意味着他们会丢失数据?所以我想当他们再次登录时我需要将数据保存在 Pouch 中?
但是如果他们使用的是共享计算机呢?这些数据会存放在 Pouch DB 中等待有人登录吗?
我也不确定如何验证数据...确保保存到数据库的数据有效等...
我想我只是想弄清楚这一点 - 我一直在谷歌上搜索并阅读我能阅读的所有内容,但它并不能完全回答我的问题。
谢谢
[**刚刚想到...
考虑一下,我实际上不需要在 SQL DB 中创建员工用户。
帐户所有者已设置 - 在 Cloudant 中创建数据库,并应用凭据。
不只是有一个想法:理论上,当添加员工时 - 我只需要在 Cloudant 中设置他们,并将他们的 ID 作为元数据写入“帐户所有者”,以便他们可以被删除等。
这样,员工可以直接登录到 Cloudant DB。
但是,我使用 Cloudants API 生成安全凭证 - 因此工作人员不会知道他们的用户名和密码是什么。我不想通过电子邮件发送用户名和密码。
有什么办法可以解决这个问题吗?我可以在创建安全凭证时指定用户名和密码吗?如何处理 cloudant 上的密码重置等事情?]
谢谢
【问题讨论】:
标签: vue.js vuejs2 couchdb hapijs cloudant