Vue 权鉴问题,加载路由时权限模块还没加载怎么破? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeeReamond
V2EX    问与答

Vue 权鉴问题,加载路由时权限模块还没加载怎么破?

 
  •   LeeReamond 2021-02-14 00:03:48 +08:00 1644 次点击
    这是一个创建于 1701 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,我是菜鸡前端,

    权鉴 token 储存在 localStorage 里,每次加载 App.vue 时候会跑一段 js 代码将它从 localStorage 拿出来,存到一个 vuex 共享状态里。

    然后 vue-router 的部分写了一个拦截器,在开始每次请求之前,判断 vuex 的权限状态,非认证的话有一些路由不给加载。

    思路是这么想的,但是实际操作的时候遇到问题是 vue-router 打开一个网页,彼时 vuex 从本地存储里加载 token 的代码还未执行,所以认为是非登录状态,无论如何都会跳转回登录页面。

    想问一下前端大佬这种通常解决方案是什么

    7 条回复    2021-02-14 12:36:50 +08:00
    lzdyes
        1
    lzdyes  
       2021-02-14 00:43:00 +08:00
    怎么会未执行呢,你初始化 state 的时候就去取持久化的 token 不就行了

    const state = {
    token: sessionStorage.getItem('token') || ''
    }
    abc11
        2
    abc11  
       2021-02-14 00:51:38 +08:00 via Android
    鉴权不是权鉴
    shakaraka
        3
    shakaraka  
    PRO
       2021-02-14 00:57:52 +08:00
    你最近问的问题好多。。。

    vue 很久没写了,我给你一个 angular 的思路:
    首先建立一个 access 的 svr,在 app.module 加入依赖,在 accessSvr 里面初始化 token 或者用户数据。然后在 router guard 里去获取在 accessSvr 的数据,用来判断登录状态和权限之类的,随你发挥,重点是 router guard 而已。

    vue 的话原理大概一致,先建立一个 access.module 实现用户数据之类的操作,然后在 vue-router 的 guard 去判断进入路由的时候验证数据,符合就 next(),不符合就 next('/login')即可

    那里说的不对望指教。
    LeeReamond
        4
    LeeReamond  
    OP
       2021-02-14 02:16:12 +08:00
    @wunonglin 对的,是我不理解 js 模块化原理,根据楼上说的解决了,是执行顺序理解不到位造成的,确实可以在 main 里先加载好权限再去 route 进行判断
    LeeReamond
        5
    LeeReamond  
    OP
       2021-02-14 02:21:30 +08:00
    @lzdyes 大佬,照你说的方法权鉴已经解决了,我有个问题是,你发的代码里 token: sessionStorage.getItem('token') || ''的这个从本地存储中提取的部分,我自己把提取封装了一个工具,放在../plugins/utils.js ,因为里面不光是取出,还要做一些 parse 之类的,大概小几十行代码。

    在组件里使用的时候就是 this.$utils.getItem('...')这么写就行了,但是在 vuex 的 index.js 里则要换成 Vue.prototype.$utils.getItem()这种。我在 mutations 里使用这个写法是可以正常调用的,但我发现在 data 部分里这么写会提示 Vue.prototype 里没有$utils 这个东西。这个部分的话如果想模块化用应该怎么导入啊
    Carseason
        6
    Carseason  
       2021-02-14 03:35:54 +08:00 via Android   1
    用 vuex 的 getters 方法来返回数据不就好了。
    lzdyes
        7
    lzdyes  
       2021-02-14 12:36:50 +08:00
    @LeeReamond 不要为了封装而封装,utils 这种工具类也不是一定非要绑在 vue 上面,你做成模块 export 出来,然后在 vuex 里面 import 进来使用即可
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     954 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:51 PVG 06:51 LAX 15:51 JFK 18:51
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86