同步localStorage

时间:2018-01-15 16:44:37

标签: javascript synchronization local-storage persistence

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

许多浏览器都有某种类型的登录信息 - 谷歌帐户,Firefox帐户等 - 将用户的浏览器连接在一起。因此理想的解决方案是将数据存储在localStorage中,但使用该帐户跨设备进行同步。有些chrome.storage等接口似乎可用于打包的应用程序,但不能用于普通的网页。

现有技术是否可能出现这种情况?

6 个答案:

答案 0 :(得分:2)

从您的网络应用程序:

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

从您的后端:

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

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

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

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

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

讨论

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


这是另一种方法:CROSS-STORAGE,使跨多个域的多个浏览器窗口/标签可以共享一个localStorage。但是,我坚信UUID应该在服务器端生成。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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:除非再次共享URL,否则它将不会反映在浏览器B中所做的更改。< / p>

我已经看到了该技术的一些示例,用户可以将它们“下载应用程序状态”作为文本(再次以base64编码),并在返回时上传该文本。它的措辞是“进行备份”和“还原备份”,这也许对用户更友好。

答案 3 :(得分:1)

我会考虑使用诸如Firebase Web之类的工具,它将为您节省大量开发时间,并将所有客户同步到数据。

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

答案 4 :(得分:0)

您想要在浏览器中为应用程序提供安全的云存储,而不必进行安全保护吗?

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

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

答案 5 :(得分:0)

您可以使用api为每个用户保存所有数据...从后端登录后从后端加载数据后,为每个用户保存api