Vue 项目中未登录状态如何统一处理

在 Vue 项目中,处理未登录状态(比如用户访问需要登录的页面时)是一项常见的需求。为了实现这一需求,我们通常使用 Vue Router 配合 Vuex 或者 Vue 的全局状态管理来统一处理未登录的状态,确保用户只能访问允许的页面。

以下是一个常见的实现步骤,采用 Vue Router 和 Vuex 来管理未登录状态:

1. 设置 Vuex 状态管理

我们可以在 Vuex 中存储用户的登录状态,并通过状态来决定是否需要重定向到登录页面。

创建 Vuex Store:
// store.jsimport { createStore } from 'vuex';export default createStore({state: {isLoggedIn: false,  // 用户登录状态},mutations: {login(state) {state.isLoggedIn = true;},logout(state) {state.isLoggedIn = false;},},actions: {checkLoginStatus({ commit }) {// 假设这里有一个异步操作来验证用户的登录状态const token = localStorage.getItem('auth_token');if (token) {commit('login');} else {commit('logout');}},},getters: {isLoggedIn(state) {return state.isLoggedIn;},},
});

在这里,我们用 isLoggedIn 来表示用户是否登录。checkLoginStatus 动作用来检查用户是否已经登录(例如通过 localStorage 中存储的 token 来验证)。

2. 设置 Vue Router 和路由守卫

然后我们配置 Vue Router,并使用 路由守卫 来拦截未登录的用户访问需要登录才能访问的页面。

配置 Vue Router:
// router.jsimport { createRouter, createWebHistory } from 'vue-router';
import { useStore } from 'vuex';
import Home from './components/Home.vue';
import Login from './components/Login.vue';
import Dashboard from './components/Dashboard.vue';// 创建路由
const routes = [{path: '/',name: 'home',component: Home,},{path: '/login',name: 'login',component: Login,},{path: '/dashboard',name: 'dashboard',component: Dashboard,meta: { requiresAuth: true },  // 需要认证才能访问},
];const router = createRouter({history: createWebHistory(),routes,
});// 路由守卫
router.beforeEach((to, from, next) => {const store = useStore();// 确保我们在检查用户状态之前加载 Vuex 状态store.dispatch('checkLoginStatus').then(() => {const isLoggedIn = store.getters.isLoggedIn;if (to.meta.requiresAuth && !isLoggedIn) {// 如果目标路由需要认证并且用户未登录,重定向到登录页面next({ name: 'login' });} else {next();  // 继续导航}});
});export default router;

3. 路由守卫详解

  • beforeEach:Vue Router 提供的全局前置守卫,能在每次路由跳转之前检查条件。
  • to.meta.requiresAuth:我们为需要认证的页面添加了 meta 字段,来标记该路由是否需要用户登录。通过 to.meta.requiresAuth 可以获取这个标记。
  • store.dispatch('checkLoginStatus'):我们通过 Vuex 的 checkLoginStatus 动作来检查用户是否已登录。
  • next({ name: 'login' }):如果用户未登录且试图访问需要登录的页面,则重定向到登录页面。

4. 处理登录状态

在登录页面成功登录后,应该更新 Vuex 中的登录状态,并且可能需要将登录状态存储到 localStoragesessionStorage 中,以便刷新页面时仍然能保持登录状态。

登录处理:
// Login.vue<template><div><h2>Login</h2><form @submit.prevent="handleLogin"><input type="text" v-model="username" placeholder="Username" /><input type="password" v-model="password" placeholder="Password" /><button type="submit">Login</button></form></div>
</template><script>
import { useStore } from 'vuex';export default {data() {return {username: '',password: '',};},methods: {handleLogin() {const store = useStore();// 这里做登录验证,并假设认证成功// 在实际应用中,你会发送 API 请求来验证用户名和密码localStorage.setItem('auth_token', 'some-auth-token');  // 假设成功获取 tokenstore.commit('login');this.$router.push({ name: 'dashboard' });  // 登录成功后跳转到仪表盘},},
};
</script>

5. 退出登录处理

在需要退出登录的地方,清除用户的认证信息,并更新 Vuex 状态。

退出登录:
// 在某个需要退出的组件中
methods: {handleLogout() {localStorage.removeItem('auth_token');  // 清除 tokenthis.$store.commit('logout');  // 更新 Vuex 状态this.$router.push({ name: 'home' });  // 跳转到首页},
}

6. 总结

  • Vuex 用于管理用户的登录状态,确保页面刷新时能够持久化。
  • Vue Router 配合 路由守卫 (beforeEach) 来控制未登录用户访问需要认证的页面。
  • 使用 localStoragesessionStorage 存储 token,保持用户的登录状态。
  • 在登录和退出时,通过 Vuex 更新状态,并进行相应的页面跳转。

这样就可以实现一个在 Vue 项目中统一处理未登录状态的方案。

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

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

相关文章

03_Django视图

三、Django模板 模板Templates 在Django框架中&#xff0c;模板是可以帮助开发者快速生成呈现给用户页面的工具 模板的设计方式实现了我们MVT中VT的解耦(M:Model&#xff0c;V:View&#xff0c;T:Template)&#xff0c;VT有着N:M的关系&#xff0c;一个V可以调用任意T&#xf…

iOS视图控制器的生命周期及各阶段的作用

iOS视图控制器&#xff08;UIViewController&#xff09;的生命周期是指从它被创建到最终被销毁的过程中所经历的一系列阶段。每个阶段都有其特定的作用和执行时机&#xff0c;这些阶段和作用对于开发高效、稳定的iOS应用至关重要。以下是iOS视图控制器的生命周期及其各个阶段的…

HTML5系列(10)-- 地理位置服务指南

前端技术探索系列&#xff1a;HTML5 地理位置服务指南 &#x1f30d; 致读者&#xff1a;探索位置服务的魅力 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 HTML5 的地理位置服务&#xff08;Geolocation API&#xff09;&#xff0c;这项强大的功能让我们能…

美畅物联丨智能监控,高效运维:视频汇聚平台在储能领域的实践探索

在当今全球能源格局不断变化的大背景下&#xff0c;对清洁能源的需求正以惊人的速度增长。储能项目作为平衡能源供需、提升能源利用效率的关键环节&#xff0c;其规模和复杂度也在不断攀升。在储能项目的运营管理过程中&#xff0c;安全监控、设备运维以及数据管理等方面面临着…

Maven 详解

Maven 详解 Maven 是一个强大的项目管理和构建工具&#xff0c;主要用于 Java 项目。Maven 基于 Project Object Model (POM)&#xff0c;通过描述项目结构、依赖关系、插件和构建生命周期&#xff0c;帮助开发者高效管理项目的构建过程。 1. Maven 的核心概念 1.1 POM&#…

提升用户体验、创新产品与高效运营,企业发展三驾马车

​在当今竞争激烈的市场环境中&#xff0c;企业要想脱颖而出并持续发展&#xff0c;需同时在提升用户体验、推动产品创新以及实现内部高效运营方面下功夫。 提升用户体验至关重要。它能提高用户满意度和忠诚度&#xff0c;增加用户口碑与推荐&#xff0c;提升企业品牌形象。可通…

基于ZooKeeper搭建Hadoop高可用集群

ZooKeeper搭建Hadoop高可用集群 在之前安装的Hadoop3.3.6集群中HDFS NameNode 和 YARN ResourceManager 都是单节点&#xff0c;集群不具有高可用性。 HDFS 高可用架构 HDFS 高可用架构主要组件&#xff1a; Active NameNode 和 Standby NameNode&#xff1a; 两台 NameNode…

机器学习—学习过程

给定训练集构建决策树的过程有几个步骤。 给出了一组由十个猫和狗的例子组成的训练集&#xff0c;决策树学习的第一步是我们必须决定在根节点使用什么特性&#xff0c;这是决策树顶部的第一个节点&#xff0c;通过一个算法&#xff0c;假设我们决定选择根节点中的特性&#xf…

矩阵转置        ‌‍‎‏

矩阵转置 C语言代码C 语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入一个n行m列的矩阵A&#xff0c;输出它的转置 A T A^T AT。 输入 第一行包含两个整数n和m&#xff0c;表示矩阵A的行数和列数。…

GPT 1到4代的演进笔记

1. GPT-1 标题是 Improving Language Understanding by Generative Pre-Training. 发表于 2018.02, 比 bert(发布于 2018.10) 早了半年. 1.1 动机 困难:NLU 任务是多样的, 有 {textual entailment, question answering, semantic similarity assessment, document classifica…

JDK17 下载与安装

下载安装包 针对不同的操作系统, 需要下载对应版本的 JDK. 如果电脑是 Windows32 位的, 建议重装系统, 重装成 64 位的操作系统. 因为 Java 从 9 版本开始, 就已经不提供 32 位版本的安装包了. 官网下载 官网下载链接 需要登录 Oracle 账号才能下载. 账号: 2872336204qq.c…

51c视觉~YOLO~合集4

我自己的原文哦~ https://blog.51cto.com/whaosoft/12512597 1、Yolo8 1.1、检测PCB元件 技术世界正在以惊人的速度发展&#xff0c;而这种转变的核心是一个革命性的工具 — 计算机视觉。它最有趣的应用之一是电子印刷电路板 &#xff08;PCB&#xff09; 的检测和分析。本文…

python学习笔记15 python中的类

上一篇我们介绍了python中的库 &#xff0c;学习了一些常见的内置库。详细内容可点击–>python学习笔记14 python中的库&#xff0c;常见的内置库&#xff08;random、hashlib、json、时间、os&#xff09; 这一篇我们来看一下python中的类 创建一个类 class 类的名称():de…

Python库常用函数-数据分析

Python库常用函数 1.pandas库 &#xff08;1&#xff09;数据读取与写入 读取 CSV 文件&#xff1a; data pd.read_csv(file.csv)读取 Excel 文件&#xff1a; data pd.read_excel(file.xlsx, sheet_nameSheet1)写入 CSV 文件&#xff1a; data.to_csv(new_file.csv, ind…

RabbitMQ消息可靠性保证机制5--消息幂等性处理

RabbitMQ层面有实现“去重机制”来保证“恰好一次”吗&#xff1f;答案是没并没有&#xff0c;而且现在主流的消息中间件都没有实现。 一般解决重复消息的办法是&#xff1a;在消费端让我们消费消息操作具有幂等性。 幂等性问题并不是消息系统独有&#xff0c;而是&#xff0…

Day28 买卖股票的最佳时机 跳跃游戏 跳跃游戏 II K 次取反后最大化的数组和

贪心算法 part02 122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 求最大利润 将每天的正利润加和 public int maxProfit(int[] prices) {int totalPrices 0;for(int i0;i<prices.length;i){if(i<prices.length-1&&prices[i1]>prices[…

MINDAGENT:游戏交互中的新兴性设计

一、摘要 1.问题/研究背景 LLM具有在多智能体系统中执行复杂调度的能力&#xff0c;并可以协调这些代理以完成需要广泛合作的复杂任务。 但是&#xff0c;目前还没有一个标准的游戏场景和相关的测试指标来评估 LLM 在游戏中的表现以及与人类玩家的合作能力。 2.研究目标/动…

洛谷P1827 [USACO3.4] 美国血统 American Heritage(c嘎嘎)

题目链接&#xff1a;P1827 [USACO3.4] 美国血统 American Heritage - 洛谷 | 计算机科学教育新生态 题目难度&#xff1a;普及 首先介绍下二叉树的遍历&#xff1a; 学过数据结构都知道二叉树有三种遍历&#xff1a; 1.前序遍历&#xff1a;根左右 2.中序遍历&#xff1a;左根…

『数据结构』空间复杂度

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

这就是AOP

AOP AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,它的目的是通过分离横切关注点(cross-cutting concerns)来提升代码的模块化程度,AOP 的概念最早是由 Xerox PARC 提出的,它并非站在 OOP 的对立面,而是对 OOP 的一个很好的补充。Spring Framework …