商品汇项目关于购物车使用uuid的疑惑

我目前在做vue2的尚品汇项目,在实现动态购物车的时候我有几个疑问的点不知道为什么
1、为什么uuid要在仓库里面获取存储
2、为什么token要放在请求头里面
3、数据库在没有token的时候不知道数据是谁的就返回不了但是为什么有了token过后数据库就知道了就可以返回对应数据数据库是怎么做到匹配的明明是没有给数据库发对应的用户的id或者uuid

img

img

img

  1. UUID在购物车中的使用可以保证购物车的唯一性,避免出现重复的购物车或者购物车数据被覆盖的情况。在仓库中获取存储,可以使得购物车数据在用户登录、退出等操作后仍然能够被保存,方便用户下次访问时恢复购物车数据。

  2. Token是一种验证身份的方式,一般放在请求头中,确保只有具有合法身份认证的用户才能访问相关资源。在购物车中,如果用户需要访问购物车信息,需要验证用户的身份,以确保只有合法用户才能访问购物车信息。

  3. 在用户登录后,服务器会为该用户生成一个唯一的token,并将该token与用户信息存储在服务器端。在用户请求购物车信息时,服务器会先验证用户的token是否合法,如果合法,则可以从服务器端获取该用户的购物车信息。在这个过程中,服务器会根据token中存储的用户信息来匹配对应的购物车信息,从而返回对应用户的购物车信息。这样可以保证用户的购物车信息只能被该用户访问,防止了恶意访问或者数据泄露的情况。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇文章讲的很详细,请看:vue中本地存储返回的token和用户id,并发送请求获取个人信息(携带token)
  • 除此之外, 这篇博客: 我用vue开发了一个动态网站--百宝阁 万字长文(spa电商,首页没有做动态,搜索页是动态)中的 五、token和uuid的使用 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答

    1. 为什么uuid要在仓库里面获取存储?

    在尚品汇项目中,uuid用来唯一标识一个用户的购物车。购物车可能需要在不同的组件中使用,为了方便在各个组件中获取和操作购物车的数据,可以将购物车放在仓库(store)中进行存储。通过在仓库中存储购物车数据,可以实现数据共享和状态管理,方便在不同组件中对购物车进行操作和展示。

    下面是一个示例代码,演示了如何在Vue.js中使用Vuex仓库来存储和操作购物车数据:

    // store.js
    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)
    
    const store = new Vuex.Store({
      state: {
        cart: [] // 购物车数据
      },
      mutations: {
        addToCart(state, item) {
          state.cart.push(item)
        },
        removeFromCart(state, index) {
          state.cart.splice(index, 1)
        },
        clearCart(state) {
          state.cart = []
        }
      },
      actions: {
        addToCart({ commit }, item) {
          commit('addToCart', item)
        },
        removeFromCart({ commit }, index) {
          commit('removeFromCart', index)
        },
        clearCart({ commit }) {
          commit('clearCart')
        }
      },
      getters: {
        getCart(state) {
          return state.cart
        }
      }
    })
    
    export default store
    

    在需要使用购物车的组件中,可以通过以下代码来获取和操作购物车数据:

    // Cart.vue
    <template>
      <div>
        <ul>
          <li v-for="(item, index) in cart" :key="index">
            {{ item.name }} - {{ item.price }}
            <button @click="removeFromCart(index)">Remove</button>
          </li>
        </ul>
        <button @click="clearCart">Clear Cart</button>
      </div>
    </template>
    
    <script>
    import { mapGetters, mapActions } from 'vuex'
    
    export default {
      computed: {
        ...mapGetters(['getCart']),
        cart() {
          return this.getCart
        }
      },
      methods: {
        ...mapActions(['removeFromCart', 'clearCart'])
      }
    }
    </script>
    
    1. 为什么token要放在请求头里面?

    在尚品汇项目中,token是用来进行用户认证和鉴权的。将token放在请求头中的目的是为了将用户身份信息安全地传递给服务器进行验证,并且能够在每次请求中都携带用户的身份信息。

    通过将token放在请求头中,可以方便地在后端服务器中进行验证,并且可以避免在每个请求的URL中都暴露用户的身份信息。同时,使用请求头的方式也符合HTTP协议的规范。

    下面是一个示例代码,演示了如何在Vue.js中使用axios库来发送带有Authorization请求头的请求:

    import axios from 'axios'
    
    // 设置默认的请求头
    axios.defaults.headers.common['Authorization'] = 'Bearer ' + token
    
    // 发送请求
    axios.get('/api/some-data')
      .then(response => {
        // 处理响应数据
      })
      .catch(error => {
        // 处理请求错误
      })
    

    在服务器端,可以根据请求头中的Authorization字段来验证用户的身份信息,并做相应的处理。

    1. 数据库在没有token的时候不知道数据是谁的,就返回不了。但是为什么有了token过后,数据库就知道了,可以返回对应的数据?数据库是如何做到匹配的?明明没有给数据库发对应的用户id或者uuid。

    在尚品汇项目中,token是用来唯一标识一个用户的身份信息。当用户登录或进行认证后,会生成一个token,并将这个token返回给前端。前端在每次请求中携带这个token,后端可以通过验证这个token来确定用户的身份。

    后端服务器在接收到带有token的请求时,会从请求头中获取token,并验证它的有效性。在验证通过后,服务器会根据这个token来确定该请求是属于哪个用户的,并返回相应的数据。

    数据库并不需要直接知道token的存在,而是通过后端服务器来实现token的验证和关联用户信息。后端服务器会在用户登录或进行认证时将用户的身份信息与token关联起来,并在每次请求中进行验证。

    具体的数据库匹配逻辑可能因项目而异,但一般的做法是在用户登录时生成一个唯一的用户ID,并将token与该用户ID进行关联。在每次请求中,服务器会通过验证token并获取关联的用户ID。根据该用户ID,服务器可以从数据库中获取对应的数据,并返回给前端。

    所以,数据库并不直接根据token来匹配数据,而是通过服务器中的逻辑来实现数据的匹配与返回。

    希望以上解答能够对你有所帮助,如果你还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^