探索 如何把本地的数据保存到 gist 上
现在的数据是直接保存到用户的浏览器上的
我们期望有一个功能 可以把本地的数据保存到用户的 gist 里面
这样当用户清空浏览器的时候 也可以通过保存在 gist 里面的数据来恢复
流程应该如下:
- 用户授权自己的 github
- 用户点击按钮后 调用 gist api 把数据保存上去
- 数据恢复的时候 可以优先读取用户本地的数据 如果发现本地数据没有的话 那么尝试读取 gist 保存的数据来进行恢复
可以把整个探索的过程记录到这个 issue 下 确实方案可行后 就可以来一个 pr
我的理解,gist是做一个备份的作用:
- 用户点击同步按钮后,调用 gist api 把数据保存上去(覆盖保存);
- 当用户清空浏览器时,也就是数据库不存在,读取gist的数据,把数据同步到本地读取。
根据 API 文档,以及创建 OAuth 应用文档得知,若想让网站应用关联 Github 用户,需存在以下先决条件:
- 应用网址
- 回调地址
纯前端是能够实现的,但是就如 官方 SDK 的警告所言:
@octokit/auth-oauth-app is not meant for usage in the browser. The OAuth APIs to create tokens do not have CORS enabled, and a client secret must not be exposed to the client.
@octokit/auth-oauth-app 并不适用于浏览器,创建 token 的 OAuth API 没有启用 CORS,并且
client secret将会显式暴露在客户端中
纯前端实现,部分 API 会存在跨域问题,并且秘钥会暴露在客户端中,会很危险。
同时还存在一个问题,若这里纯前端实现了 gist 保存,将会与后续的后端实现完全割裂,到时候就会存在两种储存方式,代码逻辑会很混乱,逻辑也不会很清晰。
那么我认为此功能需等后端实现才行,至少需等待用户相关功能实现才行。将 Github 关联后的用户 Token 与系统内的用户关联一起,将 gist 与 DB 作为两种储存数据的方式供用户选择。
我的理解,gist是做一个备份的作用:
- 用户点击同步按钮后,调用 gist api 把数据保存上去(覆盖保存);
- 当用户清空浏览器时,也就是数据库不存在,读取gist的数据,把数据同步到本地读取。
我的想法类似,但要结合后端实现后数据库的方面一起考虑:
- 正常的用户数据保存在我们的后端数据库中
- 提供备份功能,如 mac 的时间胶囊,用户可以手动触发备份,则把用户在数据库中的数据备份到自己的 github 中
- 用户想要恢复 github 的数据到本地时,应该是获取其 github 备份数据,并与本地数据进行合并后(此时如果发生数据冲突则以数据库的数据为准;也可以选择覆盖数据库的数据,则以用户 github 的备份为准),再返回到本地