最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • token过期自动跳转到登录页面

    正文概述 掘金(用户320228579782)   2021-04-06   983

    这几天项目提测,测试给我提了个bug,说token过期,路由应该自动跳转到登陆页面,让用户重新登录。先说下一些前置条件, 1:我公司的token时效在生产环境设置为一个小时,当token过期,所有接口都直接返回 2:每次路由跳转都会对token进行判断,设置了一个全局的beforeEach钩子函数,如果token存在就跳到你所需要的页面,否则就直接跳转到登录页面,让用户登录重新存取token

    接口返回的信息
    {
    	code:10009,
    	msg:'token过期',
    	data:null
    }
    全局的路由钩子函数
    router.beforeEach(async(to, from, next) => {
    //获取token
      // determine whether the user has logged in
      const hasToken = getToken()
    
      if (hasToken) {
      //token存在,如果当前跳转的路由是登录界面
        if (to.path === '/login') {
          // if is logged in, redirect to the home page
          next({ path: '/' })
          NProgress.done()
        } else {
        //在这里,就拉去用户权限,判断用户是否有权限访问这个路由
        } catch (error) {
              // remove token and go to login page to re-login
              await store.dispatch('user/resetToken')
              Message.error(error || 'Has Error')
              next(`/login?redirect=${to.path}`)
              NProgress.done()
            }
      } else {
        //token不存在
        if (whiteList.indexOf(to.path) !== -1) {
        //如果要跳转的路由在白名单里,则跳转过去
          next()
        } else {
        //否则跳转到登录页面
          next(`/login?redirect=${to.path}`)
          NProgress.done()
        }
      }
    })
    

    所以我直接在对所有的请求进行拦截,当响应的数据返回的code是10009,就直接清空用户信息,重新加载页面。我对代码简化了下,因为用户在登录时就会把token,name以及权限信息存在store/user.js文件里,所以只要token过期,把user文件的信息清空。这样,在token过期后,刷新页面或者跳转组件时,都会调用全局的beforeEach判断,当token信息不存在就会直接跳转到登录页面

    import axios from 'axios'
    import { MessageBox, Message } from 'element-ui'
    import store from '@/store'
    import { getToken } from '@/utils/auth'
    
    const service = axios.create({
      baseURL: process.env.VUE_APP_BASE_API, 
      timeout: 5000 
    })
    //发送请求时把token携带过去
    service.interceptors.request.use(
      config => {
        if (store.getters.token) {
          config.headers['sg-token'] = getToken()
        }
        return config
      },
      error => {
        console.log(error)
        return Promise.reject(error)
      }
    )
    
    service.interceptors.response.use(
      response => {
        console.log(response.data)
        const res = response.data
    
        // token过期,重返登录界面
        if (res.code === 10009) {
          store.dispatch('user/logout').then(() => {
            location.reload(true)
          })
        }
        return res
      },
      error => {
        console.log('err' + error) // for debug
        Message({
          message: error.msg,
          type: 'error',
          duration: 5 * 1000
        })
        return Promise.reject(error)
      }
    )
    
    export default service
    
    

    好啦,关于token的分享就到这里了,以上代码根据你们项目的情况换成你们的数据,有错误欢迎指出来!


    起源地下载网 » token过期自动跳转到登录页面

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元