15前端项目----用户信息/导航守卫

登录/注册

    • 持久存储用户信息
      • 问题
    • 退出登录
    • 导航守卫
    • 解决问题

持久存储用户信息

  • 本地存储:(在actions中请求成功时)
    添加localStorage.setItem('token',result.data.token);
  • 获取存储:(在user仓库中,state中token初始值设为localStorage.getItem('token')

    首先当本地存储没有值为null,仓库中token初始值也为null
    一旦登录派发action,那么本地存储就会有值,而此时仓库的token也是有相同值
    那么当一刷新,仓库数据token会首先找到本地存储的token值作为初始值

问题

  1. 跳转到其他组件search时,Header又变成未登录状态
  • 原因:
    因为只是在home组件中派发了action,search组件并未派发,那么就获取不到用户信息

  • 解决:

  1. 在所有组件添加上?不够好。
  2. 放在App组件只执行一次?不行,
    app一挂载就执行派发任务,但是还没登录呢,自然是获取不到的,可是即便是登陆完了也是获取不到,app早就挂载完了。只能第二次打开页面才会呈现已登录状态。
  1. 用户登录完,还能再次进入login路由组件进行登录吗?不应该

退出登录

  • 业务
    1. 需要发请求,通知服务器退出登录【清除token数据】
    2. 清除项目用到的数据【userInfo,token】
  1. api+vuex
//actions
async userLogout({ commit },) {//向服务器发送一次请求,清除服务器的tokenlet result = await reqLogout();if (result.code == 200) {//清除state数据---提交给mutaions//注意:actions里面不能处理statecommit('CLEAR');return 'ok';}else{return Promise.reject(new Error('fail'));}}//mutaions
CLAER(state){state.token = '';state.userInfo = {};//清除本地存储tokenlocalStorage.removeItem('token');
}
  1. 派发action
    退出登录绑定@click="logout"
//method
async logout(){try{await this.$store.dispatch('userLogout');//跳转到首页this.$router.push('/home');}catch(error){alert(error.message);}
}

问题如果在search组件页面中点击退出登录,路由应该跳转到首页。所有actions中需要返回成功与失败结果,判断是否跳转

导航守卫

  • 导航守卫:
    是 Vue Router 提供的一种机制,主要用于在路由导航过程中进行控制和管理。它允许你在路由发生变化时执行一些操作,如权限验证、数据预加载、页面访问控制等。

  • 导航守卫的三种类型:
    1. 全局守卫:只要路由发生变化,守卫就能监听到并且拦截住
    (1) router.beforeEach - 全局前置守卫
    (2) router.beforeResolve - 全局解析守卫
    (3) router.afterEach - 全局后置钩子
    2. 路由独享守卫
    3. 组件内守卫

  • 全局守卫 router.beforeEach((to,from,next)=>{}):

    • to:跳转的目的路由信息(如下图在这里插入图片描述
    • from:当前路由信息(从哪个路由跳转的)
    • next:放行函数
      • next():直接放行
      • next(‘/login’):放行到指定路由
      • next(false)

解决问题

  1. 用户登录了,不能在进入login
  2. 路由跳转其他页面同样需要用户信息展示

判断仓库中是否拿到token,如果有则说明登录了

在router配置中

//引入store
import store from '@/store';
const router = new VueRouter({……});//全局路由守卫
router.beforeEach(async (from,to,next)=>{let token = store.user.token;if(token){//登录成功//判断如果to是login则不允许放行,register也同样不允许if(to.path=='/login' || to.path=='/register'){//停留在home首页next('/home');}else{//登录成功,但跳转的不是login//【home\search\detail……】//这里可以派发actions,获取用户信息//判断有没有获取用户信息if(name){//已经有用户信息了next();}else{//没有try{await store.dispatch('getUserInfo');next();}catch(error){alert(error.message);//token无效,跳到登录页再次登录//发送请求userLogout清除服务器token(清除用户信息和本地存储token的业务mutaions也一并完成了)await store.dispatch('userLogout');next('/login');}}}}else{//未登录后期再解决,还需开发别的页面next();}
})

① 路由守卫关注有没有token(有没有登录),有没有获取信息(派发getUserInfo)
② 请求不到用户信息,说明token无效(过期了),则清除token,跳到登录页,重新登录
③ 没有token,一定没有用户信息;有用户信息则放行所有

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RSS 2025|斯坦福提出「统一视频行动模型UVA」:实现机器人高精度动作推理

导读 在机器人领域,让机器人像人类一样理解视觉信息并做出精准行动,一直是科研人员努力的方向。今天,我们要探讨的统一视频行动模型(Unified Video Action Model,UVA),就像给机器人装上了一个“…

基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(四)

上一篇介绍了基于SmartETL框架实现arxiv采集处理的基本流程,通过少量的组件定制开发,配合yaml流程配置,实现了复杂的arxiv采集处理。 由于其业务流程复杂,在实际应用中还存在一些不足需要优化。 5. 基于Kafka的任务解耦设计 5.…

Fiori学习专题三十五:Device Adaptation

由于在类似于手机的小面板上显示时&#xff0c;我们为了留出更多空间展示数据&#xff0c;可以将一些控件折叠。 1.修改HelloPanel.view.xml&#xff0c;加入expandable“{device>/system/phone}” expanded"{ !${device>/system/phone} <mvc:ViewcontrollerNam…

【记录】HunyuanVideo 文生视频工作流

HunyuanVideo 文生视频工作流指南 概述 本指南详细介绍如何在ComfyUI中使用腾讯混元HunyuanVideo模型进行文本到视频生成的全流程操作&#xff0c;包含环境配置、模型安装和工作流使用说明。 参考&#xff1a;https://comfyui-wiki.com/zh/install/install-comfyui/install-c…

统一返回JsonResult踩坑

定义了一个统一返回类&#xff0c;但是没有给Data 导致没有get/set方法&#xff0c;请求一直报错 public class JsonResult<T> {private int code;private String message;private T data;public JsonResult() {}public JsonResult(int code, String message, T data) {…

dubbo-token验证

服务提供者过滤器 import java.util.Map; import java.util.Objects;/*** title ProviderTokenFilter* description 服务提供者 token 验证* author zzw* version 1.0.0* create 2025/5/7 22:17**/ Activate(group CommonConstants.PROVIDER) public class ProviderTokenFilt…

沃伦森电气高压动态无功补偿装置助力企业电能优化

在工业生产的复杂电能环境中&#xff0c;电能质量直接影响企业的生产效率和运营成本。XX光伏科技有限公司作为一家快速发展的制造企业&#xff0c;随着生产规模的不断扩大&#xff0c;其内部电网面临功率因数过低、电压波动频繁等问题&#xff0c;导致供电部门罚款增加、设备故…

基于EFISH-SCB-RK3576工控机/SAIL-RK3576核心板的网络安全防火墙技术方案‌(国产化替代J1900的全栈技术解析)

‌基于EFISH-SCB-RK3576/SAIL-RK3576的网络安全防火墙技术方案‌ &#xff08;国产化替代J1900的全栈技术解析&#xff09; ‌一、硬件架构设计‌ ‌流量处理核心模块‌ ‌多核异构架构‌&#xff1a; ‌四核Cortex-A72&#xff08;2.3GHz&#xff09;‌&#xff1a;处理深度…

Maven 动态版本与SNAPSHOT机制详解

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

趣味编程:答案之书

概述&#xff1a;该篇博客主要介绍的是曾经一度风靡全网的答案之书小程序。 目录 1. 效果展示 2. 源码展示 3. 代码逻辑详解 3.1 头文件与全局变量 3.2 main函数 3.3 主循环 3. 4 绘制界面 4. 运行问题 5.小结 1. 效果展示 该小程序是动态的效果&#xff0c; 因此实…

多线程初阶(2)

说到多线程编程&#xff0c;一定少不了线程安全这个话题。我们前面了解了线程的原理以及线程与进程的关系。线程之间共享资源&#xff0c;这就代表了在多线程编程中一定会产生冲突&#xff0c;所以我们需要在敲代码时保证线程安全&#xff0c;避免这样的问题发生。 我们先看一…

【Ubuntu】安裝向日葵远程控制

前言 在Ubuntu 24.04.2下安装向日葵远程控制出错&#xff0c;少了一些依赖&#xff0c;需要安装一些依赖。 1.安装gconf2-common wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gconf/gconf2-common_3.2.6-6ubuntu1_all.deb sudo dpkg -i gconf2-common_3.2.6-6ub…

【Python开源】深度解析:一款高效音频封面批量删除工具的设计与实现

&#x1f3b5; 【Python开源】深度解析&#xff1a;一款高效音频封面批量删除工具的设计与实现 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f525; 系列专栏&#xff1a;&#x1f40d;《Python开源项目实战》 &#x1f4a1; 热爱不止于代码&#xff0c;热情…

JAVA房屋租售管理系统房屋出租出售平台房屋销售房屋租赁房屋交易信息管理源码

一、源码描述 这是一套房屋租售管理源码&#xff0c;基于SpringBootVue框架&#xff0c;后端采用JAVA开发&#xff0c;源码功能完善&#xff0c;涵盖了房屋租赁、房屋销售、房屋交易等业务。 二、源码截图

一篇文章讲清楚mysql的聚簇索引、非聚簇索引、辅助索引

聚簇索引与非聚簇索引最大的区别就是&#xff1a; 聚簇索引的索引和数据是存放在一起的&#xff0c;都是在叶子结点&#xff1b; 非聚簇索引的索引和数据是分开存储的&#xff0c;叶子节点存放的是索引和指向数据文件的地址&#xff0c;通过叶子节点找到索引&#xff0c;再通…

使用ESPHome烧录固件到ESP32-C3并接入HomeAssistant

文章目录 一、安装ESPHome二、配置ESP32-C3控制灯1.主配置文件esp32c3-luat.yaml2.基础通用配置base.yaml3.密码文件secret.yaml4.围栏灯four_light.yaml5.彩灯rgb_light.yaml6.左右柱灯left_right_light.yaml 三、安装固件四、HomeAssistant配置ESPHome1.直接访问2.配置ESPHom…

什么是变量提升?

变量提升&#xff08;Hoisting&#xff09; 是 JavaScript 引擎在代码执行前的一个特殊行为&#xff0c;它会将变量声明和函数声明自动移动到当前作用域的顶部。但需要注意的是&#xff0c;只有声明会被提升&#xff0c;赋值操作不会提升。 ​​核心概念​​ 变量声明提升&…

【万字长文】深入浅出 LlamaIndex 和 LangChain:从RAG到智能体,轻松驾驭LLM应用开发

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

2025 后端自学UNIAPP【项目实战:旅游项目】3、API接口请求封装,封装后的简单测试以及实际使用

一、创建请求封装目录 选中自己的项目&#xff0c;右键鼠标---->新建---->目录---->名字自定义【我的是api】 二、创建两个js封装文件 选中封装的目录&#xff0c;右键鼠标---->新建---->js文件---->名字自定义【我的两个js文件分别是my_http和my_api】 三…

autojs和冰狐智能辅助该怎么选择?

最近打算做自动化脚本&#xff0c;在autojs和冰狐智能辅助中做选择&#xff0c;不知道该怎么选。没办法只能花费大量时间仔细研究了autojs和冰狐智能辅助&#xff0c;综合考虑功能需求、开发复杂度、编程经验及项目规模等因素。以下是两者的核心对比及选择建议&#xff0c;仅供…