【问题标题】:How to fetch user's data once they have a JWT拥有 JWT 后如何获取用户的数据
【发布时间】:2020-11-01 13:10:15
【问题描述】:

我在我的电子商务网站上使用 JWT 进行用户身份验证。用户成功登录后,我会向他们发送一个存储在浏览器本地存储中的 JWT。

一旦客户端拥有 JWT,我是否正在尝试找出让客户端为该用户获取特定数据的最佳(或标准化)方式?这些数据包括他们的购物车、愿望清单、订单历史等。我可以想到几个可能的解决方案:

  1. 在 JWT 中包含所有数据。这可能是错误的方法。似乎只有 user_idphone_numberemail_address 等数据应该存储在 JWT (source) 中。

  2. 允许客户端从 JWT 解析 user_id(例如 75)。然后客户端点击/users/75(认证需要JWT)来获取用户的数据。但是,这似乎是多余的,因为端点和 JWT 都指向用户。

  3. 创建一些端点,例如 /user/shopping_cart/user/wishlist 供客户端命中(身份验证需要 JWT)。后端将根据 JWT 确定哪个用户正在发出请求。这似乎是更好的选择。

我敢打赌选项 3 是最好的方法?

【问题讨论】:

    标签: jwt


    【解决方案1】:

    方法一,将所有内容存储在 JWT 中:

    每次用户更新他们的购物车或愿望清单时,您都必须生成一个新的 JWT 并将其返回给用户。您不想在用户执行的每个操作(添加/更新/删除)上生成一个新令牌。虽然您可以在 JWT 中对数据进行编码以进行初始数据加载。

    方法 2,用一个请求返回所有内容

    这种方法适用于少量数据和相互关联的数据。例如,在某些情况下,您可能希望在单个页面上显示 # 购物车中的商品数量、愿望清单商品的数量、他们的订单总数。在这种情况下,您可以制作类似 /dashboard 的内容,它会返回有关用户的基本信息。

    GET: /dashobard
    {
      wishlists: 5,
      totalOrders: 100,
      cartItems: 10,
    }
    

    方法 3

    我会采用这种方法。随着您的应用程序的增长和大量用户的使用,他们将拥有多个愿望清单和多个过去的订单历史记录,并且您的应用程序可能有单独的页面来显示这些信息。在这种情况下,为每个资源设置单独的路由是个好主意。

    GET: /users/1/wishlists/  --> get all wishlist of user 1
    DELETE/UPDATE: /users/1/wishlists/10/ --> update wishlist with id 10 of user 1
    
    GET: /users/1/orders --> get all orders of user 1
    

    您可以结合所有方法并相应地使用

    【讨论】:

      【解决方案2】:

      可以在客户端或后端存储一些信息,如购物篮物品,正如你所说,你可以保存信息并通过用户 ID 获取它们,但一些信息可以像购物车一样存储在 localstorage 中,在后面最终获取速度很重要,我建议在后端使用 redis 来处理简单信息之类的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-12
        • 2018-08-17
        • 2019-04-24
        • 1970-01-01
        • 2020-10-26
        • 1970-01-01
        • 1970-01-01
        • 2020-07-15
        相关资源
        最近更新 更多