Vue3+Ts项目——登录页面跳转到首页

前言:根据我上篇所实现的左边菜单栏之后,需要登录成功跳转home页面。主要分为三步。

第一步:创建三个ts文件结合pinia缓存登录信息和token

src\api\userTypes.ts

就是个接口类方便页面和另一个ts文件数据传递,其实也可以不用

export interface LoginResponse {userInfo: UserInfotoken: string}export interface UserInfo {user: string | null}
src\stores\modules\user.ts

这个ts就是结合pinia用于处理页面传过来要处理缓存的数据。

import { defineStore } from 'pinia'
import type {LoginResponse, UserInfo} from '@/api/userTypes'import { useStorage } from '@vueuse/core'export const useUserStore = defineStore('user', () => {const userInfoRef = useStorage('USER_INFO', {} as UserInfo, sessionStorage)const tokenRef = useStorage('TOKEN', '', sessionStorage)function setUserInfo(userInfo: UserInfo) {userInfoRef.value = userInfoconsole.log('userInfoRef====>',userInfoRef);}function setToken(token: string) {tokenRef.value = token}function toLogin(param: LoginResponse) {    setToken(param.token) setUserInfo(param.userInfo)}function toLogout() {setUserInfo({} as UserInfo);setToken("");window.location.href = '/login'
}function getUsername() {return userInfoRef.value.user}function getToken() {return tokenRef.value}return { toLogin, toLogout, getToken, getUsername }
})
src\stores\counter.ts
import type {App} from 'vue'
import {createPinia} from 'pinia'const store = createPinia()export function useStore(app: App<Element>): void {app.use(store)
}export {store}

第二步:页面调用ts的登录处理方法,router下index.ts路径跳转处理

我这边处理是登录接口请求成功之后,再调用toLogin()方法。其实可以结合接口请求一起写,我这个是借鉴Vue + Ts 项目(七)—— 登录页面及登录校验,实现方式很多。我先结合自己项目实现功能。

包含登录操作的vue页面
import { useUserStore } from "@/stores/modules/user";
import { useRouter, useRoute } from "vue-router";
import { LoginResponse } from "@/api/userTypes";
// 引入这三//再在setup ()下第一行,切记一定要前排。不然router和route为空。 
setup (){const userStore = useUserStore();const router = useRouter();const route = useRoute();const LoginResponseModel: Ref<LoginResponse> = ref({userInfo: {user:''},token: "",});// 再在登录回调成功的地方加上LoginResponseModel.userInfo ={user:res.user// 根据你自己的数据结构来} LoginResponseModel.token = res.tokenuserStore.toLogin(LoginResponseModel);// 这里LoginResponseModel,会报红。但是不影响流程。我后期看看怎么去红。哈哈哈哈哈,我还是太废了。const redirect = route.query.redirect as stringif (redirect) {router.replace(redirect)} else {router.replace('/combination/dashboard')}

不前排会报错Cannot read properties of undefined (reading 'replace')
也不要试图用useRouter()直接.replace会报错inject() can only be used inside setup() or functional components.等一些问题

src\router\index.ts

主要是beforeEach方法。

import {createWebHistory, createRouter} from "vue-router";
import type {App} from 'vue'
// 获取所有路由
import routes from './routes'import { useUserStore } from "@/stores/modules/user";const router = createRouter({routes,// 这里使用历史记录模式history: createWebHistory()
})router.beforeEach((to, from, next) => {const userStore = useUserStore();  const isAuthenticated = userStore.getToken() && userStore.getToken() !== "";console.log('====isAuthenticated==',isAuthenticated);// isAuthenticated用于判断没有登录缓存,手动属于的路径,不会跳转成功。if (isAuthenticated) {next();} else {if (to.name === "login") {next();} else {next({ name: "login", query: { redirect: to.fullPath } });}}
});export const useRouter = (app: App<Element>): void => {app.use(router)
}

对了,别忘了配置login页面的路由src\router\modules\login.ts,把默认路径也是设置为登录页面

import type { RouteRecord } from '@/router/type'
import BasicLayout from "@/layouts/BasicLayout.vue";
import { CalendarTools } from '@vicons/carbon'  const loginRoutes: RouteRecord[] = [{path: "/",name:'login',meta:{hidden: true},children: [{path: "/login",name: "login",component: () => import("@/views/login/login.vue"),},],},
]export default loginRoutes

到目前为止,登录成功后已经可以跳转了。先这样

第三步:检测token过期,登出处理

第三步先欠着。下周我再继续学习。毕竟周五了。我心已经起飞了。

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

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

相关文章

【异步绘制】UIView刷新原理 与 异步绘制

快捷目录 壹、 iOS界面刷新机制贰、浅谈UIView的刷新与绘制概述一.UIView 与 CALayer1. UIView 与 CALayer的关系2. CALayer的一些常用属性contents属性contentGravity属性contentsScale属性maskToBounds属性contentsRect属性 二.View的布局与显示1.图像显示原理2.布局layoutSu…

【UE】在蓝图中修改材质实例的参数的两种方式

目录 方式一、通过“在材质上设置标量/向量参数值”节点实现 方式二、通过“设置标量/向量参数值”节点实现 方式一、通过“在材质上设置标量/向量参数值”节点实现 1. 在材质中设置了两个参数 2. 创建材质实例 3. 创建一个蓝图&#xff0c;对静态网格体赋予材质实例 在事件…

【C++初阶】类与对象(上)

类与对象&#xff08;上&#xff09; 1.面向过程和面向对象初步认识2.类的引入3.类的定义4.类的访问限定符及封装4.1 访问限定符4.2 封装 5.类的作用域6.类的实例化7.类对象模型7.1 如何计算类对象的大小7.2 结构体内存对齐规则 8.this指针8.1 this指针的引出8.2 this指针的特性…

C语言——高精度减法

相较于高精度加法&#xff0c;高精度减法会有一些不同&#xff0c;如果是num1 - num2的话&#xff0c;如果num1 > num2时&#xff0c;也就是结果为正时&#xff0c;只需要对每一位进行按位相减&#xff0c;如果不够就向下一位借位&#xff1b;但是如果是num1 < num2时&am…

【算法与数据结构】53、LeetCode最大子数组和

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;程序一共两个变量&#xff0c;一个result一个count。result用来记录最终的结果&#xff0c;count记录当…

LAMP平台——构建PHP运行环境

在构建LAMP平台时&#xff0c;各组件的安装顺序依次为Linux、Apache、MySQL、PHP。其中Apache和 MySQL的安装并没有严格的顺序&#xff1b;而PHP环境的安装一般放到最后&#xff0c;负责沟通Web服务器和数据库 系统以协同工作。 PHP 即 Hypertext Preprocessor&#xff08;超级…

数据结构 之map/set练习

文章目录 1. 只出现一次的数字算法原理&#xff1a;代码&#xff1a; 2. 随机链表的复制算法原理&#xff1a;代码&#xff1a; 3. 宝石与石头算法原理&#xff1a;代码&#xff1a; 4. 坏键盘打字算法原理&#xff1a;代码&#xff1a; 5. 前K个高频单词算法原理&#xff1a;代…

图片的批量建码怎么做?一图一码的制作方法

在使用图片展示内容时&#xff0c;经常会有同一类型的图片信息是有区别的&#xff0c;如果需要将每张图片批量生成二维码图片&#xff0c;那么出了一张一张去制作之外&#xff0c;有没有能够一键批量建码的功能可以解决这个问题呢&#xff1f;下面来给大家分享一下图片批量建码…

SpringBoot 源码解析1:环境搭建

SpringBoot 源码解析1&#xff1a;环境搭建 1.项目结构2.pom.xml3.MyApplication 1.项目结构 最简单的spring-web项目 2.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns…

2023 年安徽省职业院校技能大赛信息安全管理与评估项目竞赛须知

2023 年安徽省职业院校技能大赛&#xff08;高职组&#xff09; “信息安全管理与评估”项目竞赛须知 一、参赛队须知 1.参赛队名称&#xff1a;统一使用规定的学校代表队名称&#xff0c;不接受跨市、跨校组队报名。 2.参赛队组成&#xff1a;本赛项为团体赛&#xff0c;以…

记删除CK不彻底问题 及 新增表TTL机制

问题背景&#xff1a;对CK表进行删除时&#xff0c;发现无法彻底删除&#xff0c;并报错如下&#xff1a; 同时也会有下面的报错信息&#xff1a; 解决过程&#xff1a; 确认CK 节点是否健康存活&#xff0c;select * from system.clusters 可以查看&#xff1b;确认CK元数据是…

redis中存储list<map>,list<entity>结构数据如何处理

redis中存储list结构数据如何处理 用到的工具类 1、序列化操作 String multiMapStr JSON.toJSONString(multiMapList); // list转换为json字符串 Object o JSON.parse(userList); // list转换为object List<Map<String, String>> maps CastBeanUtil.castListM…

基于ssm日用品网站设计论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本日用品网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

linux系统的u盘/mmc/sd卡等的支持热插拔和自动挂载行为

1.了解mdev mdev是busybox自带的一个简化版的udev。udev是从Linux 2.6 内核系列开始的设备文件系统&#xff08;DevFS&#xff09;的替代品&#xff0c;是 Linux 内核的设备管理器。总的来说&#xff0c;它取代了 devfs 和 hotplug&#xff0c;负责管理 /dev 中的设备节点。同时…

openEuler商业化进展可观:累计装机量超610万套,市场持续扩容

12月15日至16日&#xff0c;以“崛起数字时代&#xff0c;引领数智未来”为主题的操作系统大会&#xff06;openEuler Summit 2023在北京国家会议中心举办。大会旨在汇聚全球产业界创新力量&#xff0c;构筑坚实的基础软件根基&#xff0c;推动基础软件技术持续创新&#xff0c…

win10 node-red安装及管理配置

win10 node-red安装及管理配置 一、安装node.js环境二、安装node-red环境2.1 node-red安装2.2 node-red安全登录方式 三、pm2管理node-red服务3.1 安装pm23.2 pm2管理node-red服务 四、常用命令4.1 npm命令4.2 pm2命令 更多 本文旨在详细介绍windows10系统下的node-red开发配置…

visio打出根号,下标,并调整符号的大小

插入公式对象 打出根号和带下标的字母 调整符号大小 把做好的公式符号弄到visio中的图中 ctrla 复制符号 进入visio中粘贴 并 调整大小 调整大小直接拖动边框上的圆点即可。

java SSM酒店客房管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM酒店客房管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

在开发微信小程序的时候,报错navigateBack:fail cannot navigate back at firstpage

这个错误的意思是&#xff1a;在这个页面已经是第一个页面了&#xff0c;没办法再返回了 报错原因 这个错误原因其实也简单&#xff0c;就是在跳转的时候使用了wx.redirectTo()&#xff0c;使用wx.redirectTo()相当于重定向&#xff0c;不算是从上一个页面跳转过来的&#xf…

com.sun.org.apache.xerces.internal.impl.dv.util.Base64

com.sun.org.apache.xerces.internal.impl.dv.util.Base64 Access restriction: The type Base64 is not API (restriction on required library D:\Java\jdk1.8.0_341\jre\lib\rt.jar) Maven Update Project 虽然没错误了&#xff0c;但是有警告&#xff0c;好奇&#xff1f;…