我应该为我的电子商务网站使用 JWT 还是 Sessions?

Posted

技术标签:

【中文标题】我应该为我的电子商务网站使用 JWT 还是 Sessions?【英文标题】:Should I use JWT or Sessions for my eCommerce website? 【发布时间】:2020-03-15 16:24:22 【问题描述】:

我正在为个人项目构建电子商务网站。它使用 React 作为前端,使用运行在 django 上的 REST API 作为后端。我希望用户无需帐户即可将商品添加到购物车并下订单。

对于访客用户,使用会话/cookie 来存储信息非常棒,但是对于登录用户,我想使用数据库将商品存储在购物车中。这将需要创建一个用户并给他们一个身份验证令牌,以便他们可以执行必要的操作。

那么我应该使用会话/cookie 身份验证还是有更好的方法来使用 JWT 实现我想要的?

【问题讨论】:

【参考方案1】:

这两种方法都可以很好地工作。但是,我目前正在研究类似的东西,我个人会推荐更简单的选项,即经典会话方法。如果操作不当,JWT 令牌可能更难维护,有时甚至不安全。此外,JWT 令牌不会在登录之间保留。

在这两种方式中,我不明白为什么创建和维护购物车会更好,除非会话系统实际上可以将完整的购物车存储在会话本身中。然后,您可以在 API 级别实现会话控制器。 例如:GET "https://host/api/cart" 返回会话购物车中的商品。

# Django session
request.session['cart_id'] = cartId

# JWT Tokens
jwt.encode(‘cart_id’: cartId ...

小提示.. 如果您在 localhost 上工作以进行反应,而在远程服务器上为您的 API 工作,则设置会话可能会更加困难。 (cookie 通常按域设置)。

【讨论】:

【参考方案2】:

我正在使用JWT,我认为如果您使用数据库,您可以创建一个生成的JWTby用户然后将其存储在数据库中,您可以控制您的jwt的可用性,在参数中,我找到了最好的方法为了保护您的 API,将 JWT 令牌添加到标头中。

【讨论】:

【参考方案3】:

如果您将在 AWS 中托管您的应用程序,请查看 AWS Cognito,它是一种身份和用户池服务。他们的免费套餐非常慷慨。这与非常适合 React 的 AWS Amplify 一起,将为您提供开箱即用的身份验证和用户管理。

【讨论】:

【参考方案4】:

我会使用 Cognito 身份验证并将其与 react 和后端 api 集成。这将有助于管理应用程序之外的用户。

【讨论】:

以上是关于我应该为我的电子商务网站使用 JWT 还是 Sessions?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB电子商务网站的数据建模

我正在为客户开发电子商务网站,他们如何更新商店中的商品?

使用 django 和 AWS SES 签名 V4 发送电子邮件

为我的印度电子商务网站创建 Paypal 商业帐户所需的所有详细信息是啥

我应该以 jwt 还是纯 json 从服务器发送敏感信息?

通过 SMTP 使用 AWS SES 发送电子邮件,错误 421