【问题标题】:How to protect admin routes with Vue.js?如何使用 Vue.js 保护管理路由?
【发布时间】:2019-04-23 00:09:23
【问题描述】:

我一直在使用 localStorage 来存储 JWT 令牌并进行身份验证,它工作正常,因为后端受到保护,什么不是,是 Vue.js 及其组件中的前端页面,任何人都可以创建一个浏览器中的错误令牌并访问页面,面板菜单,但由于令牌被后端无效,因此未加载数据。您是否意识到用户将能够正常浏览页面?我怎样才能避免这种情况?只允许经过后端验证的用户浏览网站。

我正在使用 Vuex,但我想不出解决方案。 isLogged 状态接收 localStorage 令牌,因此用户可以轻松绕过浏览器。


我想到了一个解决方案,不要评判我。在进入每条路由之前,向后端发送请求检查token,如果为false,则移除localStorage,这样可以吗?

【问题讨论】:

标签: vue.js


【解决方案1】:

我会说你的解决方案一开始是一个相当不错的解决方案,但我认为你可以改进一下。

因为您使用的是 VueX,所以您可以将用户(或其他一些变量)存储在 Vuex 商店中。然后在每条路线之前,您可以检查商店是否有用户。

如果 Store 没有用户,请检查 localStorage 是否有令牌。如果没有令牌,则用户无权前往该路线。

如果 localStorage 确实有令牌,则调用后端并检查令牌是否有效。如果令牌有效,则将用户存储在 Vuex Store 中并继续。如果令牌无效,则用户无权前往该路由。

这将防止您在仍然进行验证的同时创建对后端的不必要调用。

【讨论】:

  • 不错的解决方案!一个问题,当用户在页面上刷新时,Vuex Store 会重置变量吗?
  • 是的,但是第 3 和第 4 段涵盖了这一点
  • 谢谢你,我的朋友!新手的另一个问题哈哈,Vuex Store可以被浏览器操作吗?例如:将 isLogged 状态更改为 true
  • @viniciussvl Vuex 商店永远不能被任何用户操纵(即使在开发模式下)(根据我自己的经验)。 Vuex Store 只能通过应用程序本身的方法和调用来改变,所以只能是预定义的方法。
  • 正确,突变只能在预定义的代码中调用。应用程序进入浏览器后,您无法手动更改 Vuex Store
【解决方案2】:

或者,例如,您可以在您的商店状态中拥有一个具有类似“userRole”的用户对象,这样您就可以检查身份验证/令牌/角色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2020-08-10
    • 2015-11-09
    • 2013-03-27
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多