同步本地存储

Syncing localStorage

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

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

现在的技​​术能做到吗?

您想在浏览器中为您的应用程序提供安全的云存储,而无需执行安全措施?

您可以让您的应用通过 Auth0 使用 GitHub 执行 OAuth,并创建一个 GitHub 应用,用户将其添加到私有存储库。然后,您的应用会将其数据同步到存储库。

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

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

来自您的网络应用程序:

  1. post 一个电子邮件地址和用户数据到后端(例如PHP)

来自您的后端:

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

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

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

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

现在,您可以通过 posting 那个 UUID

从后端获取用户数据

Discussion:

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


这是另一种方法:CROSS-STORAGE,它使多个浏览器 windows/tabs 跨多个域共享一个 localStorage。但是,我坚信UUID应该在服务器端生成。

据我所知,没有好的方法可以做您想做的事。有一些技巧,但它们各有缺点。

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

从那里,您可以通过允许他们使用他们选择的任何方法共享 URL 来将其作为 "syncing" 页面的用户问题。

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

我已经看到了这种技术的一些示例,其中用户将 "download the application state" 作为文本(同样,base64 编码)并在返回时上传该文本。它被措辞为 "take a backup" 和 "restore a backup" 这可能对用户更友好。

您可以使用 WebRTC without a signaling server 来同步您的应用程序的两个实例。

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

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