【问题标题】:Is Vuex Store accessible from console or from client's browser?可以从控制台或客户端浏览器访问 Vuex 商店吗?
【发布时间】:2017-09-13 15:40:32
【问题描述】:

我正在构建这个 Vue 2 应用程序,我一直在阅读应该使用 Vuex 状态管理,一开始我不太了解它的概念,但现在在玩过 Vue 之后,我可以看到它是最对于更大的应用程序。

但我的问题是开发控制台或任何形式的人可以访问存储在 store.js 中的数据,我的意思是那些我不呈现给浏览器的数据吗?

我可以将敏感数据保存在商店中吗?敏感的意思是,用户单击此链接,向该用户发送消息,在此页面上花费了很多时间等...同时将所有这些数据上传到我的数据库..

Vuex Store 适合这种工作/工作吗?

干杯

【问题讨论】:

  • Vue 3 怎么样?

标签: vue.js vuejs2 vue-component vuex


【解决方案1】:

是的,他们可以。

我使用的调用是

document.getElementsByTagName('a')[0].__vue__.$store.state

这假设第一个链接具有 vue 属性,几乎总是如此。如果没有,请尝试其他标签。用户界面令人不快,但足够自我记录。这是一个有用的调试工具,用户可以做的事情。

当然,一个有决心且技术娴熟的用户可以编写一个浏览器插件来为此添加一个好的 UI。或者这就是Vue.js devtools extension for Chrome 所做的?我还没有真正使用过。

【讨论】:

  • IIRC Vue Devtools 仅在应用程序在开发(not production)模式下运行并启用源映射时才有效。
  • 为了让 Vue Devtools 工作,你必须明确地将 devtools 标志设置为 true - vuejs.org/v2/api/#devtools
  • 如果第一个'a'标签不是vue实例,你可以使用Array.from(document.getElementsByTagName('a')).find(e => e.__vue__).__vue__,它将返回vue实例(如果存在的话)
  • 由于几乎所有的 vue 应用都是在 <div id='app'></div> 元素上初始化的,所以你可以使用 document.getElementById('app').__vue__....
【解决方案2】:

你可以使用

__VUE_DEVTOOLS_GLOBAL_HOOK__.store

【讨论】:

  • edit 在您的回答中说明其工作原理以及为什么它是问题中描述的问题的解决方案。见How to Answer
  • 这与 Vue Devtools 相关:github.com/vuejs/vue-devtools。但实际上,它可以在 Chrome 控制台中运行。
【解决方案3】:

您可以在Chrome中使用Vue devtools查看商店:

【讨论】:

  • 仅在开发模式下
  • 可能是因为我有 Vue 3,但扩展名显示“未检测到 Vue.js”。该应用正在开发模式下运行。
【解决方案4】:

dspeyer 的回答是我回答的基础,但基于 <a> 标记在我正在调试的应用程序上不起作用。所有其他答案都假设 Vue 处于开发模式(或者可以通过浏览器扩展强制进入开发模式),但这对于在移动网络浏览器上调试实时生产站点是不可能的。

此代码适用于所有生产站点,包括远程移动调试,并且不需要开发模式:

Array.from(document.querySelectorAll('*')).find(e => e.__vue__).__vue__.$store.state

它在功能上与dspeyer 的答案相同,但搜索所有元素,而不仅仅是<a> 标签。

【讨论】:

    【解决方案5】:

    这对我有用:

    _this.$store

    【讨论】:

      【解决方案6】:

      可以从开发控制台或以任何形式访问存储在 store.js 中的数据

      简短的回答:没有
      更长的答案:取决于他们是鬼鬼祟祟的。但我不会太担心这个......因为(我假设)你计划将收集到的数据发送到某种类型的 API,即使他们无法访问 Vuex 商店......他们仍然可以看到 AJAX请求出去。

       

      我可以保留敏感数据吗

      在客户端上保留任何类型的私人或敏感数据通常不是一个好主意。但是在您的特定情况下,我认为这很好,因为您定义为“敏感”的只是有关用户操作的一些元数据(又名:他们的历史记录)。

       

      Vuex Store 适合这种工作/工作吗?

      你可以在 Vuex 中存储几乎任何东西。数据类型没有真正的限制……只有多少(我不建议将 500mb 的图像转换为字符串并将其放入存储中……)

      【讨论】:

      • 非常感谢您的回答 :) 非常感谢!
      • 我不会在这里说“简答:不”。它可能会导致人们产生一种错误的安全感。我会说一个简单的“是”。获取它的一个例子是rootElementOfApp.__vue__.$store
      • 感谢@BillCriswell 提供有关访问商店的提示——这对于调试目的非常有用。
      猜你喜欢
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      相关资源
      最近更新 更多