繁体   English   中英

同步本地存储

[英]Syncing localStorage

我正在寻找一种解决方案,允许浏览器的 localStorage 不那么本地化,以便人们可以在多个设备上访问他们的数据。 传统的方式是在服务器上运行一个数据库并让人们登录; 但我试图避免这样做。 我希望服务器端是轻量级的——如果可能的话,甚至可能是完全静态的——并且没有安全存储密码的工作,担心数据保护等。

许多浏览器都有某种登录信息——Google 帐户、Firefox 帐户等——将用户的浏览器联系在一起。 因此,理想的解决方案是将数据存储在 localStorage 中,但使用该帐户跨设备同步。 chrome.storage等接口,貌似对打包的应用可用,但对普通网页不可用。

以目前的技术,这样的事情可能吗?

从您的网络应用程序:

  1. 将电子邮件地址和用户数据发布到后端(例如 PHP)

从您的后端:

  1. 生成一个 UUID 并将用户数据保存在一个名为该 UUID 的文件中

  2. 将该 UUID 发送回客户端并将此标识符与数据一起保存到localStorage

此时,您可以拥有一个静态链接,您可以:

  • 在客户端:以明文或二维条码的形式打印到屏幕上,准备好被您的移动设备识别
  • 在服务器端:通过电子邮件发送到给定的电子邮件地址。

现在,您可以通过发布该 UUID 从后端获取用户数据

讨论

UUID 存储用户数据的安全性如何? 我相信, UUIDv4 (从“随机数据”生成)足以安全地创建合理的唯一标识符。 因此,请注意您是如何生成随机种子的。 这是一个很好的参考: PHP function to generate v4 UUID 因此,该静态链接应该足够安全,您可以使用任何现有的身份验证系统通过电子邮件或任何您想要的方式共享该链接。


这是另一种方法: CROSS-STORAGE ,它允许跨多个域的多个浏览器窗口/选项卡共享单个localStorage 但是,我坚信 UUID 应在服务器端生成。

您可以在没有信令服务器的情况下使用WebRTC来同步应用程序的两个实例。

我会考虑使用像 firebase web 这样的工具,它会为您节省大量的开发时间,并且会将您的所有客户端同步到数据。

https://firebase.google.com/docs/storage/web/start

AFAIK 没有什么好方法可以做你想做的事。 有一些黑客,但他们每个人都有自己的缺点。

如果您真的不关心这里的安全性(我假设是这种情况,因为您不需要服务器):您可以使用 URL 本身作为您的localStorage 也就是说,您可以例如base64encode(JSON.stringify(yourLocalStorageData))并将其添加到 URL 上: example.com/#eyJmb28iOiAiYmFyIn0=\\n 当浏览器打开您的 URL 时,它可以首先查找上述内容并执行相反的过程: localStorage = JSON.parse(base64decode(URL_DATA))

从那里您可以通过允许用户使用他们选择的任何方法共享 URL 来解决用户“同步”页面的问题。

缺点当然是保持同步。 用户有 2 个浏览器。 用户在浏览器 A 和浏览器 B 之间共享原始链接。用户继续在浏览器 B 上工作。用户现在打开浏览器 A:它不会反映在浏览器 B 中所做的更改,除非 URL 在另一个方向再次共享。

我已经看到了一些这种技术的例子,其中用户将“下载应用程序状态”作为文本(同样,base64 编码),并在返回时上传该文本。 它被称为“进行备份”和“恢复备份”,这可能对用户更友好。

您希望在浏览器中为您的应用程序提供安全的云存储,而无需进行安全保护?

您可以让您的应用程序通过 Auth0 与 GitHub 进行 OAuth,并创建一个用户添加到私有存储库的 GitHub 应用程序。 然后,您的应用将它们的数据同步到存储库。

然后 GitHub 处理身份,Auth0 处理身份验证,GitHub 处理数据存储。

您可以使用 api 保存所有数据...登录后每个用户的 api 从后端加载数据,然后保存在本地存储中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM