Как получить данные пользователя, если у них есть JWT - PullRequest
0 голосов
/ 12 июля 2020

Я использую JWT для аутентификации пользователя на моем веб-сайте электронной коммерции. Как только пользователь успешно входит в систему, я отправляю ему JWT, который хранится в локальном хранилище браузера.

После того, как у клиента есть JWT, я пытаюсь найти лучший (или стандартизованный) способ чтобы клиент мог получить определенные данные для этого пользователя? Эти данные включают их корзину, список желаний, историю заказов и т. Д. c. Я могу придумать несколько возможных решений:

  1. Включить все данные в JWT. Вероятно, это неправильный подход. Похоже, что в JWT ( источник ) должны храниться только такие данные, как user_id, phone_number и email_address.

  2. Разрешить клиенту проанализировать user_id (например, 75) из JWT. Затем клиент нажимает /users/75 (для аутентификации требуется JWT), чтобы получить данные пользователя. Однако это кажется избыточным, потому что и конечная точка, и JWT указывают на пользователя.

  3. Создайте некоторые конечные точки, такие как /user/shopping_cart и /user/wishlist, для доступа клиента (JWT требуется для аутентификации ). Бэкэнд определит, какой пользователь делает запрос, на основе JWT. Это кажется лучшим вариантом.

Я готов поспорить, что вариант 3 - лучший подход?

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Подход 1, Хранение всего в JWT:

каждый раз, когда пользователь обновляет свою корзину или список желаний, вы должны создать новый JWT и вернуть его пользователю. Вы бы не хотели создавать новый токен при каждом действии (добавлении / обновлении / удалении), выполняемом пользователем. Хотя вы можете закодировать данные в JWT для начальной загрузки данных.

Подход 2, вернуть все одним запросом

Этот подход подходит для меньшего количества данных и данных, которые связаны друг с другом . Например, в некоторых случаях вы можете захотеть показать # количество товаров в корзине, количество элементов списка желаний, общее количество заказов, которые они сделали на одной странице. В этом случае вы можете создать что-то вроде /dashboard, которое возвращает основную c информацию о пользователе.

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

Подход 3

Я бы использовал go с этим подходом. По мере того, как ваше приложение растет и его использует большое количество людей, у них будет несколько списков желаний и несколько прошлых заказов, и ваше приложение может иметь отдельные страницы для отображения этой информации. В этом случае рекомендуется иметь отдельный маршрут для каждого ресурса.

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

Вы можете комбинировать все подходы и использовать соответственно

0 голосов
/ 12 июля 2020
• 1000 скорость конечной выборки имеет значение, я предлагаю использовать redis для таких вещей, как простая информация в бэкэнде.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...