【问题标题】:Save user authentication status in vuex state is safe Solution?在vuex状态下保存用户认证状态是安全的解决办法?
【发布时间】:2020-06-24 08:06:52
【问题描述】:

我看过各种关于 spa vue 身份验证的视频。所有这些视频都提供了基于 vuex 的解决方案

像这样; 他们在诸如 loggedIn 之类的 getter 中创建了返回用户身份验证状态的函数。

store.js

[...]

state:{
    token: null,
    user: null
},
getters: {
    loggedIn: (state) => {
        return state.token && state.user ? true : false
    },
},

[...]

Dashboard.vue(这是受保护的路由)

[...]

beforeRouteEnter (to, from, next) {
    if(store.getters.loggedIn)
        next()
    else
        next({ name:'login' })

}

[...]

一切正常,但我可以通过 vue 开发工具手动更改状态,因此我可以输入受保护的路由,因此身份验证无法正常工作。

我的问题:

  1. 生产模式下用户可以修改vuex状态吗?
  2. 在vuex状态下保存用户认证状态是安全的解决办法吗?

【问题讨论】:

    标签: vue.js authentication vuex


    【解决方案1】:

    用户可以在生产模式下修改vuex状态吗?

    是的,用户可以对应用的状态进行任何操作。您可以混淆某些内容,但不能阻止用户检查或修改您应用的数据。

    在vuex状态下保存用户认证状态是安全的解决办法吗?

    这是一种方法,我确实推荐它,尤其是随着应用程序大小的增长,管理应用程序中的共享状态会变得更容易。但我不会说它是“安全的”或“不安全的”。

    我可以通过 vue 开发工具手动更改状态,因此我可以进入受保护的路由,因此身份验证无法正常工作。

    如您所描述的,该应用的行为很容易被规避。您只能完全控制服务器代码。如果由于用户使用开发工具篡改了数据,受保护路由在客户端上变得可访问,则服务器应拒绝受保护路由所需的任何对特权数据的请求。

    【讨论】:

    • 因此,从用户的角度来看,没有任何组件可以完全隐藏,只能限制从服务器接收到的数据。例如,如果我从服务器接收数据并将其显示在仪表板组件中,未经授权的用户可以看到仪表板组件但看不到任何数据,因为数据是从服务器接收的。这是真的吗?
    • 是的,这是正确的。您对客户端代码没有安全感,只有服务器代码。
    猜你喜欢
    • 2020-04-10
    • 2021-04-24
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 2019-07-22
    • 1970-01-01
    • 2019-06-17
    相关资源
    最近更新 更多