拥有 JWT 后如何获取用户的数据
Posted
技术标签:
【中文标题】拥有 JWT 后如何获取用户的数据【英文标题】:How to fetch user's data once they have a JWT 【发布时间】:2020-11-01 13:10:15 【问题描述】:我在我的电子商务网站上使用 JWT 进行用户身份验证。用户成功登录后,我会向他们发送一个存储在浏览器本地存储中的 JWT。
一旦客户端拥有 JWT,我是否正在尝试找出让客户端为该用户获取特定数据的最佳(或标准化)方式?这些数据包括他们的购物车、愿望清单、订单历史等。我可以想到几个可能的解决方案:
在 JWT 中包含所有数据。这可能是错误的方法。似乎只有 user_id
、phone_number
和 email_address
等数据应该存储在 JWT (source) 中。
允许客户端从 JWT 解析 user_id
(例如 75
)。然后客户端点击/users/75
(认证需要JWT)来获取用户的数据。但是,这似乎是多余的,因为端点和 JWT 都指向用户。
创建一些端点,例如 /user/shopping_cart
和 /user/wishlist
供客户端命中(身份验证需要 JWT)。后端将根据 JWT 确定哪个用户正在发出请求。这似乎是更好的选择。
我敢打赌选项 3 是最好的方法?
【问题讨论】:
【参考方案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 来处理简单信息之类的东西。
【讨论】:
以上是关于拥有 JWT 后如何获取用户的数据的主要内容,如果未能解决你的问题,请参考以下文章