【问题标题】:Could I benefit from jwt in my Vue app when using Vuex?使用 Vuex 时,我可以从 Vue 应用程序中的 jwt 中受益吗?
【发布时间】:2022-02-02 23:27:09
【问题描述】:

我正在构建一个使用纯 PHP(无 PHP 框架)作为后端的 Vue 应用程序。对于我的 authentication 系统,我认为使用 jwt(JSON Web Tokens) 可以帮助我。于是我在网上搜索,找到了this articlethis one,帮助我在jwt的帮助下构建了一个登录注册系统。在我的应用程序的前端(Vue)和后端(PHP)中实现这些文章没有问题。目前我可以在用户注册到站点时发送一个请求,并在firebase php-jwt library 的帮助下发回一个 jwt 到前端。

但主要问题来了。我从 Vue 生态系统中了解到,我们使用 Vuex 的原因之一是在我们的应用程序中全局存储一些数据(状态),而无需调用服务器,我们可以在任何地方(或任何路线)使用它们我们的 Vue 应用程序。

通过阅读那两篇文章的one,我注意到 jwt 最终存储在 Vuex 中,当用户想要查看授权页面(需要授权的页面)时,Vue 应用程序检查 Vuex 以查看令牌是否存在,如果存在,应用程序允许用户查看该页面。

通过阅读second one,我注意到当用户向网站后端发送请求时,jwt 很有用。在这种情况下,jwt 被解码并且如果它是有效的(例如到期日期是 OK 或 ...),用户可以访问授权页面。

根据上面的描述,在我的 Vue 应用程序中使用 jwt 有什么好处?如果我只存储用户的 iduser-name,它可以为我完成相同的任务。换句话说,如果我想清楚地问我的问题,问题是 什么时候 我想使用 Vuex 而不是每次都向服务器发送请求,我不需要也不能从中受益jwt(我是对的吗?)。同样我想使用 jwt 时,我无法从 Vuex 中受益。因为我必须每次都发送请求来确定 jwt 是否有效,然后再决定用户。

如果我理解正确并且同时使用 jwt 和 Vuex 存在矛盾,为什么有这么多教程谈到 authentication 一个使用 jwt 的 Vue 应用程序?另外,如果我对 jwt 的理解是正确的,这是否意味着当 jwt 过期时,我必须要求用户一次又一次地登录(无论使用或不使用 Vuex)?

谁能帮助我更好地理解这个问题,以便更好地决定我的身份验证系统?

【问题讨论】:

    标签: php vue.js authentication jwt vuex


    【解决方案1】:

    根据上面的描述,在我的 Vue 应用中使用 jwt 有什么好处?

    JWT 用于身份验证。如果需要,您可以使用 cookie 会话。

    我认为它不会对您的应用产生影响。如果您的 JWT 恰好包含一些您需要的数据(例如用户 ID),可能会为您节省一些往返时间。

    问题是当我想使用 Vuex 而不是每次都向服务器发送请求时。

    我不确定这两者是如何相关的。

    如果你需要提出请求,那你为什么要使用 Vuex?

    Vuex 是一个状态管理库。

    如果你需要做一个请求,那就做一个请求。

    Vuex 与 JWT 没有任何关系。

    如果您决定将 JWT 令牌放入 Vuex,那么这就是您的决定。有些人把它放在浏览器的localStorage 或cookies 中。

    同样,当我想使用 jwt 时,我无法从 Vuex 中受益。因为我必须每次都发送请求来确定 jwt 是否有效,然后再决定用户。

    你可以在 Vuex 中存储很多不需要先请求的东西:

    • 全局组件状态,例如登录/注册模式、导航菜单、音频/视频播放器
    • 您在亚马逊或任何与商店相关的应用中看到的类别过滤器

    我不确定您在做什么,每次都需要发送请求以了解 jwt 是否有效。

    如果需要在服务器端完成某些事情,那么无论您使用 jwt 还是 cookie,都必须在服务器端完成。

    另外,如果我对 jwt 的理解是正确的,那是否意味着当 jwt 过期时,我必须要求用户一次又一次地登录(无论使用或不使用 Vuex)?

    JWT 是一种格式。例如,如果您使用 OAuth2,则有“访问令牌”和“刷新令牌”。您可以使用“刷新令牌”自动获取另一个“访问令牌”,这可能意味着您不需要再次显示登录表单。

    如果您愿意,您也可以每次都刷新您的 JWT 令牌。我不确定这意味着什么,但你可以做很多事情。

    这些链接可能对您有所帮助:


    我的问题是:

    如果您不使用 JWT 而只使用 cookie,情况会有什么不同? (除了需要刷新令牌等技术方面)

    您可能以错误的方式接近/思考/使用 JWT。

    【讨论】:

    • 我知道 Vuex 和 jwt 是两个不同的独立工具。但我无法理解你的意思。你说使用 localStoragecookiesjwt 没有区别吗?另外一个额外的问题是无论如何要解码我的 vue front-part 中返回的 jwt 以查看用户的信息?因为所有教程都在网站的后面部分解码。
    • 您可以将 jwt 存储在任何您想要的位置、cookie、localStorage 或您的 Vuex。如果你把它放在 Vuex 中,那么这就是你把它放在那里的决定。您还可以在前端解码 jwt。
    • 感谢您提供的帮助和信息。虽然我需要更多地了解 jwt 并将其结合到我的应用程序中,但如果您知道任何关于纯中 "access token" 和特别是 "refresh token" 的教程php 和 not 在 OAuth 2.0 的帮助下,请把链接给我。另外,如果您有一些关于在 vue front-part 中解码 jwt 的链接,我很高兴知道这一点。
    • 我不建议在安全方面重新发明轮子,特别是如果您不知道自己在做什么并且因为这需要时间。 access_tokenrefresh_token 有点特定于 OAuth2。
    • 只要找一个 jwt 解码器来解码一个 jwt。如果您没有任何特定的理由选择 jwt,我很可能会建议您坚持使用会话 cookie,直到您知道自己在做什么。它得到了很好的支持、记录、证明和测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2019-09-02
    • 2021-05-28
    • 2011-10-14
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    相关资源
    最近更新 更多