当前位置: 首页 > 工具软件 > Each > 使用案例 >

路由拦截器router.beforeEach的使用

勾俊
2023-12-01

项目用户方提供一个链接包含用户的姓名身份证号,我们的后台根据用户方提供的链接生成用户的唯一token识别码,后台把这个token码拼接到了项目的url地址后面

前端要做的业务就是取到用户的token,并且进行存储以及axios的请求地址拼接。

整体的思路就是,在前端的路由拦截器beforeEach中,通过query传参取到当前的地址后拼接的url,判断token是否是否存在,存在的话进行cookie的存储,以及路由的放行,要保证页面跳转后地址栏后面不再有token的拼接的情况下,后面放行的页面直接next(to.path),除了判断地址栏后是否有token存在的情况下,还需要判断cookie中是否有token的存在看看是否存成功了,有的话, 就说明是进入到了首页或者其他的页面,直接放行就ok,没有token的情况下,就return出去并且进行提示

Router.beforeEach((to, from, next) => {
  // debugger
  let token = to.query.token
  if (token) {
    setToken(token)
    next(to.path)
  } else if (getToken()) {
    next()
  } else {
    MessageBox.confirm(
      '会话已过期',
      '系统提示', {
        confirmButtonText: '确定',
        closeOnClickModal: false,
        type: 'warning',
        showClose: false,
        showCancelButton: false,
        center: true
      }).then(() => {
      window.location.href = localStorage.getItem('return-Url')
      removeToken()
    })
    return
  }
})

export default Router

若想在其他页面用到地址栏中的参数

可以对地址栏的参数先进行存储保存,再在其它页面进行获取使用

  let token = to.query.token
  if (JSON.stringify(to.query) != "{}") {
    localStorage.setItem('dataQuery', JSON.stringify(to.query))
  }

在进行cookie存储token的同时,需要前端判断设置token的过期时间,cookie自带过期时间的设置

const cookieExpires = new Date(new Date().getTime() + 30 * 60 * 1000) 
//30分钟过期,30乘以60是1800秒,再乘以1000,换算成时间戳加上最新的时间戳

export const setToken = (token) => {

  Cookies.set(TOKEN_KEY, token, {

    expires: cookieExpires

  })

}

cookie字段如果不设置expires,随着浏览器关闭,cookie失效

如果cookie存储时间大于1天,直接expires:30 后面加天数即可

如果存储时间小于1天,expires填写时间,

var millisecond = new Date().getTime();

var expiresTime = new Date(millisecond + 60 * 1000 * 15);

如果设置的时间是过去的时间,那么立即失效

 对路由前置的理解,

路由前置next()方法是对页面放行的意思

当next('/home'),配置参数时,路由前置就会执行2遍,第二步执行beforeEach是跳转页面时的路由拦截

 类似资料: