路由守卫和 生成 token

2020年3月4日

路由守卫

在项目中,需要检测用户是否未登入直接访问指定页面,这时候就要强制让用户跳转到登入页面

const router = new Router({
  routes: [
    {
      path: '/',
      redirect: '/login',
    },
    {
      path: '/login',
      name: 'login',
      component: Login
    }
  ]
})

router.beforeEach((to, from, next) => {
    // 如果是 login 页面 放行
    if (to.path === '/login') return next()

    // 检测是否已经登入,若已经登入则放行
    const tokenStr = window.sessionStorage.getItem('token')

    // 未登入则强制跳转到登入页
    if (!tokenStr) return next('/login')
    next()
})

export default router

token

一般会在用户登入时生成一个 token 作为已经登入的凭证,用户的操作都需要检测这个凭证是否存在.

所需模块:uuid

安装:npm i uuid -D

const guld = require('uuid/v4')
// 生成一个 32 位的 token
let token = guld().replace(/\-/g, '')
// 设置 token 过期时间一周
let expires = 7 * 86400 * 1000 
let token_expires = Math.floor((Date.now() + expires) / 1000)
// 将信息发生给前端
ctx.body = {
    'state': 0,
    'msg': '登入成功',
    'token': token,
    'token_expires': token_expires
}