【问题标题】:What is the best approach to work with data while using token based authentication使用基于令牌的身份验证时处理数据的最佳方法是什么
【发布时间】:2016-05-27 18:41:33
【问题描述】:

我正在构建一个让用户存储 cmets 的示例应用程序。 我已经创建了注册和登录过程。当用户注册时,他的详细信息将存储在 MySQL 数据库中,并向浏览器返回一个令牌。现在他可以访问个人资料页面了。

当现有用户登录时,他会被重定向到个人资料页面。个人资料页面只有在用户注册或登录时才能访问。

登录后,如果他已经添加了,我想显示他所有的cmets。

我的前端使用 Angular,后端使用 Laravel。对于身份验证,我使用 Satellizer。

我想知道,考虑到用户将添加、编辑他的 cmets 的事实,在处理数据时最好的方法是什么。我应该使用 localstorage 并将数据存储在键值对中,还是应该创建一个 json 文件,每次用户添加评论或进行更改时都会更新该文件。

我想知道处理来自服务器的数据的最有效方法是什么,以便应用程序即使在扩展到 10000 个用户和每个用户的大量数据时也能快速运行。

谢谢

【问题讨论】:

  • 您是说将用户 cmets 存储在本地,而不是每次都从服务器获取,对吗?
  • 是的,我对如何去做有点困惑。此外,如果用户进行更改,它将在本地反映,但我应该何时更新服务器

标签: angularjs laravel local-storage file-storage satellizer


【解决方案1】:

您应该在进行更改时在服务器上更新它,而不是仅仅依赖本地存储。您可以使用 localstorage 进行缓存,但它应该只用于不可变数据,不应该真正用于将要更改的数据。

因此,在这种情况下,您将通过 API(最好是 RESTful 的!)添加和更新新的 cmets。进行更改后,您可以将 cmets 存储在本地,并且仅在用户发表新评论时更新它们,但是您很快就会遇到数据在不同客户端上无效的问题。 (即,如果您在另一台计算机上更新 cmets,另一台计算机将不会知道)。

或者,您可以缓存 cmets,然后简单地 ping 服务器以查明是否已添加新 cmets。例如,这可以使用 HEAD 请求来检查 cmets 资源上的最后修改日期。

【讨论】:

    【解决方案2】:

    您可以在用户浏览器本地存储 cmets 数据,但您应该妥善管理它。

    我不知道您的服务器会有多少负载以及现在投入的时间是否值得。

    • 您可以获取 cmets 并将其存储在本地
    • 用户添加评论,然后您在本地更新并向服务器发送请求
      • 您需要跟踪请求响应,如果请求失败,请通知用户并从本地删除 cmets。
      • 如果请求成功,您可以继续前进。

    ** facebook 使用这种“成功第一”的方法 用户做了一个动作,他看到它立即发生,在后台可能需要几秒钟,只有当它失败时他们才会通知你。

    ** 看看他们的评论过程,当你评论时,它立即出现,没有加载......但是在BG中加载发生了。

    【讨论】:

    • 您必须非常小心让 cmets 立即出现。这被称为“乐观编程”,如果用户认为已添加评论,可能会导致严重问题,只是在他们离开时它会失败。
    • “乐观编程”是我一直在寻找的短语。当然你不会在关键点上这样做,这当然取决于你的应用程序
    • @AndrewKhan 和 TzookBarNoy - 我们尝试的方法之一是 -> 当用户登录时,在 json 文件中获取该用户的所有数据。现在应用程序从 json 文件中获取数据,当他更改某些内容时,更改会在服务器上更新,并且 json 文件会再次更新..您如何看待这种方法..?
    • 听起来不错,它肯定会起作用,只要保持数据一致即可。你如何处理外部变化?或者不需要……
    • 没有让您了解外部更改..?
    猜你喜欢
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2015-03-28
    • 2021-04-26
    • 2021-10-30
    • 2021-01-25
    • 1970-01-01
    • 2014-10-21
    相关资源
    最近更新 更多