在 Vue/Vue Router 应用中如何优雅地检测用户登录状态? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fourstring
V2EX    Vue.js

在 Vue/Vue Router 应用中如何优雅地检测用户登录状态?

  •  
  •   fourstring 2018-12-21 16:28:13 +08:00/span> 3956 次点击
    这是一个创建于 2553 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我现在采用的方案是为需要登录后才能访问的路由添加一个 meta.requireLogin 元信息,然后使用 beforeEach 全局导航守卫,且在后端开放一个只返回用户是否登录的 API (检测 session 中的信息),并在 beforeEach 全局导航守卫中请求该 API 之后检测返回结果。(不依靠这种机制来阻止未登录用户访问,后端 API 逻辑有检测用户权限,只是为了当未登录用户访问需要登录路由时自动重定向到登录页面)

    我觉得这种方法的主要问题是会重复请求一个后端 API,造成不必要的网络请求浪费,请问是否有可以避免这么多次重复请求的方案呢?谢谢!

    8 条回复    2018-12-21 16:51:24 +08:00
    zjwshisb
        1
    zjwshisb  
       2018-12-21 16:32:20 +08:00   1
    在 axios 的拦截器处理就行了,未登录访问需要登录的页面时 api 接口返回 403, axios response 对 403 统一处理
    fourstring
        2
    fourstring  
    OP
       2018-12-21 16:37:26 +08:00
    @zjwshisb #1 那这样实现的话是不是只能用 History API 来重定向了?还能用 Vue Router 吗?
    ochatokori
        3
    ochatokori  
       2018-12-21 16:41:53 +08:00 via Android   1
    @fourstring 我是在 axios 的作用域 new 一个 vue 实例在调用 vue router 的重定向方法,不知道楼下有没有更好的方法
    shintendo
        4
    shintendo  
       2018-12-21 16:44:32 +08:00   1
    vuex 里保存当前登录用户信息,路由 beforeEach 里判断这个信息是否存在,若不存在则跳登录页,若存在则直接放行,不考虑登录是否失效的问题,由 axios 的拦截器处理登录失效
    echol
        5
    echol  
       2018-12-21 16:46:49 +08:00   1
    默认只有未登录的路由,登陆后用 addRoutes 添加,需要的加上单独检测
    shintendo
        6
    shintendo  
       2018-12-21 16:49:20 +08:00   2
    @ochatokori 可以在根组件的 created 里面给 axios 加拦截器的吧,这里可以访问 router
    zjwshisb
        7
    zjwshisb  
       2018-12-21 16:49:40 +08:00   1
    @fourstring 可以啊,跟 4 楼的方法差不多,不过是全部交给了 axios 的拦截器,因为要登录的页面必然要请求某些 api,然后在 axios 的拦截器里面跳转登录页,就是会跳转两次页面,不过胜在省事
    zjwshisb
        8
    zjwshisb  
       2018-12-21 16:51:24 +08:00   1
    @fourstring 在 axios 的拦截器里面 import vue-router 一样用的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     900 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 20:37 PVG 04:37 LAX 12:37 JFK 15:37
    Do have faith in what you're doing.
    ubao msn 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