Vue3的路由守卫以及登录状态储存过程

 更新时间:2024年08月30日 17:33:48   作者:依恋、阳光  
这篇文章主要介绍了Vue3的路由守卫以及登录状态储存过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

路由守卫

Vue 3使用Vue Router 4来进行路由管理和导航控制。Vue Router提供了一些钩子函数来实现路由守卫。

路由守卫是一些特殊的函数,它们会在路由发生变化时被调用,可以用来进行一些操作,例如权限验证、登录状态检查、页面跳转等。

在Vue Router 4中,路由守卫可以分为三种类型:全局守卫、路由独享守卫和组件内守卫。

全局守卫

全局守卫会在所有路由跳转时被调用,可以用来进行一些全局性的操作,例如权限验证和路由跳转统计。全局守卫有三种类型:

  • beforeEach(to, from, next): 在路由跳转前被调用,可以进行一些预处理操作,例如权限验证、路由跳转拦截等。如果要继续路由跳转,需要调用next()函数。
  • afterEach(to, from): 在路由跳转完成后被调用,可以进行一些后处理操作,例如页面跳转统计、日志记录等。
  • beforeResolve(to, from, next): 在路由解析完毕后被调用,用于异步路由加载时等待所有相关组件都解析完毕。如果要继续路由跳转,需要调用next()函数。

以beforeEach为例(router.js)

import store from '../store/index.js'


// 路由守卫
router.beforeEach((to, from, next) => {

  // console.log("store", store.state.uInfo)
  // 判断是否登录
  const uInfo = store.state.uInfo.userInfo;

  if (!uInfo.userName) {
    if (to.path === '/login') {
      next();
      return;
    }
    next('/login');
  }
  else {
    next();
  }
})

登录状态储存

在Vue 3中,可以使用Vue的响应式状态管理功能和浏览器提供的localStorage或sessionStorage API来存储登录状态。

//在用户登录后将信息存储在localStorage中
localStorage.setItem('user', JSON.stringify(user))

//在用户注销时删除存储的信息
localStorage.removeItem('user')

//在应用程序初始化时检查用户是否已登录
const user = JSON.parse(localStorage.getItem('user'))
const isAuthenticated = user !== null

//将登录状态存储在响应式状态中
import { reactive } from 'vue'

const state = reactive({
  isAuthenticated: false
})

//在登录时更新状态
state.isAuthenticated = true

//在注销时更新状态
state.isAuthenticated = false

在上面的示例中,我们使用localStorage将用户信息存储在本地浏览器中,并使用Vue的响应式状态管理功能来存储登录状态。

  • 当用户登录时,我们将其信息存储在localStorage中,并将响应式状态中的isAuthenticated属性设置为true。
  • 当用户注销时,我们删除存储在localStorage中的信息,并将isAuthenticated属性设置为false。

在应用程序初始化时,我们检查localStorage中是否存在用户信息,如果存在,则将isAuthenticated属性设置为true。

localStorage的用法

在Vue3中,localStorage.setItem用于将数据存储在浏览器的本地存储中。

setItem方法用于向本地存储添加键值对。第一个参数是键,第二个参数是值。

以下是如何使用它的示例:

localStorage.setItem('key', 'value');

您可以使用getItem方法检索值:

localStorage.getItem('key');

localStorage.removeItem用于从本地存储中删除指定的键值对。

以下是如何使用它的示例:

localStorage.removeItem('key');

例子:

const login = () => {

                store.commit('setUserInfo', data.loginData);

                // 设置本地存储数据 localStorage.setItem('key', 'value');
                localStorage.setItem('loginData', JSON.stringify(data.loginData))

                router.push({
                    path: '/user',
                });
            }

store

export default {

    namespace: true,

    state: {
        // localStorage.getItem('key');
        userInfo: localStorage.getItem('loginData') && JSON.parse(localStorage.getItem('loginData')) || {},
    },

    mutations: {
        setUserInfo(state, uInfo) {
            state.userInfo = uInfo;
        }

    }
}

退出登录时

  const loginOut = () => {
                localStorage.removeItem('loginData');
                store.state.uInfo.userInfo = {};
                router.push({
                    path: '/login',
                })
            }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue中的router-view父子组件传参方式

    vue中的router-view父子组件传参方式

    这篇文章主要介绍了vue中的router-view父子组件传参方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Vue前端项目自适应布局的简单方法

    Vue前端项目自适应布局的简单方法

    最近项目开发中遇到一个需求,需要实现宽度自动适应,所以下面这篇文章主要给大家介绍了关于Vue前端项目自适应布局的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • vue实现前端列表多条件筛选

    vue实现前端列表多条件筛选

    这篇文章主要为大家详细介绍了vue实现前端列表多条件筛选,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • 关于vue-cli3打包代码后白屏的解决方案

    关于vue-cli3打包代码后白屏的解决方案

    这篇文章主要介绍了关于vue-cli3打包代码后白屏的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Vue3组件库框架搭建example环境的详细教程

    Vue3组件库框架搭建example环境的详细教程

    这篇文章主要介绍了Vue3组件库框架搭建example环境的详细教程,本文便搭建 example 开发环境和打包构建,并在example中使用组件库,需要的朋友可以参考下
    2022-11-11
  • 详解如何用模块化的方式写vuejs

    详解如何用模块化的方式写vuejs

    这篇文章主要介绍了详解如何用模块化的方式写vuejs,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 总结vue映射的方法与混入的使用过程

    总结vue映射的方法与混入的使用过程

    这篇文章主要介绍了总结vue映射的方法与混入的使用过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue与iframe之间的交互方式(一看就会)

    vue与iframe之间的交互方式(一看就会)

    这篇文章主要介绍了vue与iframe之间的交互方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 详解Vue3常用的6种组件通信方式

    详解Vue3常用的6种组件通信方式

    我们用Vue3开发项目时,常常需要面对的一个问题就是组件之间的通信,如何将数据发给对应的组件,这是不可避免的一个问题,该篇讲述了Vue3常用的6种组件通信方式,需要的朋友可以参考下
    2024-09-09
  • 详解关于Vue版本不匹配问题(Vue packages version mismatch)

    详解关于Vue版本不匹配问题(Vue packages version mismatch)

    这篇文章主要介绍了详解关于Vue版本不匹配问题(Vue packages version mismatch),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09

最新评论