首页 > 其他分享 >vue3中用户登陆会把用户跳转到登录页面,如何让用户登录完成后,跳回原来的页面上

vue3中用户登陆会把用户跳转到登录页面,如何让用户登录完成后,跳回原来的页面上

时间:2023-09-03 10:31:59浏览次数:29  
标签:登录 路径 用户 redirectPath 路由 页面

vue3中用户登陆会把用户跳转到登录页面,如何让用户登录完成后,跳回原来的页面上_用户登录

本地存储

在 Vue 3 中,你可以使用 Vue Router 和 sessionStorage 或 localStorage 来实现用户登录后跳回原来的页面。以下是一种常见的实现方式:

  1. 在用户登录之前,记录当前页面的路由路径:
  • 在需要登录的页面组件中,在用户点击登录前,使用 this.$route.path 获取当前页面的路由路径,并将其存储在 sessionStorage 或 localStorage 中(选择其中一个根据你的需求)。
// 在需要登录的页面组件中
   methods: {
     login() {
       sessionStorage.setItem('redirectPath', this.$route.path);
       // 执行用户登录操作
     }
   }
  1. 在用户登录成功后,跳转回原来的页面:
  • 在登录成功后的处理逻辑中,从 sessionStorage 或 localStorage 中获取之前存储的路由路径。
  • 利用 Vue Router 的 router.push() 方法将用户重定向到之前的页面。
// 在登录成功后的处理逻辑中
   const redirectPath = sessionStorage.getItem('redirectPath');
   if (redirectPath) {
     sessionStorage.removeItem('redirectPath');
     router.push(redirectPath);
   } else {
     // 如果没有之前的路由路径,跳转到默认页面
     router.push('/');
   }

通过上述步骤,你可以实现用户登录完成后跳回原来的页面。

需要注意的是,sessionStorage 仅在当前会话期间有效,而 localStorage 在关闭浏览器后依然有效。根据你的需求选择适合的存储方式。

Store方式

除了使用 sessionStorage 或 localStorage 以外,你还可以使用 Vue Router 的路由导航守卫(Navigation Guards)来实现用户登录后跳回原来的页面。以下是一种使用路由导航守卫的方式:

  1. 创建一个全局的路由导航守卫:
  • 在你的路由配置文件中,创建一个全局的 beforeEach 导航守卫。
  • 在导航守卫中,检查用户是否已经登录。如果用户未登录,则将当前路由路径存储在 Vuex 状态管理中(或者其他全局状态管理方式)。
// 路由配置文件中
   import store from './store';

   router.beforeEach((to, from, next) => {
     const isAuthenticated = store.getters.isAuthenticated;
     if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) {
       store.commit('setRedirectPath', to.fullPath);
       next('/login');
     } else {
       next();
     }
   });
  1. 在用户登录成功后,获取存储的重定向路径并跳转:
  • 在用户登录成功的处理逻辑中,从 Vuex 状态管理中获取之前存储的重定向路径。
  • 利用 Vue Router 的 router.push() 方法将用户重定向到之前的页面。
// 在登录成功后的处理逻辑中
   const redirectPath = store.state.redirectPath;
   if (redirectPath) {
     store.commit('clearRedirectPath');
     router.push(redirectPath);
   } else {
     // 如果没有之前的重定向路径,跳转到默认页面
     router.push('/');
   }
  1. 在 Vuex 状态管理中存储重定向路径:
  • 创建一个名为 redirectPath 的状态,并提供相应的 mutation 和 action 来设置和清除该状态。
// Vuex 状态管理中
   const state = {
     redirectPath: ''
   };

   const mutations = {
     setRedirectPath(state, path) {
       state.redirectPath = path;
     },
     clearRedirectPath(state) {
       state.redirectPath = '';
     }
   };

   const actions = {
     setRedirectPath({ commit }, path) {
       commit('setRedirectPath', path);
     },
     clearRedirectPath({ commit }) {
       commit('clearRedirectPath');
     }
   };

通过上述方式,你可以使用路由导航守卫和全局状态管理来实现用户登录完成后跳回原来的页面。

URL地址栏方式

还有一种方式是使用 URL 参数来传递重定向路径。以下是使用 URL 参数的实现方式:

  1. 在用户登录之前,将当前页面的路由路径作为参数附加到登录链接上:
  • 在需要登录的页面组件中,获取当前页面的路由路径,并将其作为参数附加到登录链接上。
// 在需要登录的页面组件中
   methods: {
     login() {
       const redirectPath = this.$route.path;
       // 将 redirectPath 作为参数附加到登录链接上
       window.location.href = `/login?redirect=${encodeURIComponent(redirectPath)}`;
     }
   }
  1. 在用户登录成功后,从 URL 参数中获取重定向路径并跳转:
  • 在登录成功后的处理逻辑中,从 URL 参数中获取之前附加的重定向路径。
  • 利用 Vue Router 的 router.push() 方法将用户重定向到之前的页面。
// 在登录成功后的处理逻辑中
   const urlParams = new URLSearchParams(window.location.search);
   const redirectPath = urlParams.get('redirect');
   if (redirectPath) {
     // 将重定向路径解码后再进行跳转
     router.push(decodeURIComponent(redirectPath));
   } else {
     // 如果没有之前的重定向路径,跳转到默认页面
     router.push('/');
   }

通过使用 URL 参数来传递重定向路径,你可以实现用户登录完成后跳回原来的页面。

需要注意的是,这种方式需要在后端进行对登录链接的处理,以获取和解析 URL 参数。同时,为了安全考虑,你可能需要对重定向的 URL 参数进行验证和过滤,以防止恶意操作。





标签:登录,路径,用户,redirectPath,路由,页面
From: https://blog.51cto.com/jackiehao/7338011

相关文章

  • MySQL添加用户并授权
    执行前要确认,授权给这个用户的数据库已经被创建好createdatabase库名charactersetutf8mb4;接下来,可以采用直接授权的方式,能够同时创建用户以及授权grantselect,insert,delete,update,createon库名.*to'用户名'@'%'identifiedby'密码';......
  • VSCode-用户代码片段,代码模板
    项目过渡到vue3,为了提高开发效率,减少重复代码编写,通过VSCode编辑器的CodeSnippets完成代码。实现效果,输入关键词Index,回车,会自动出现自定义的代码段。1.打开VSCode,点击文件=》首选项-》配置用户代码片段 2.新建全局代码片段文件,输入文件名称,并回车  3.修改模板......
  • uniapp项目实践总结(七)编写一个简单的应用页面
    之前自定义了顶部和底部导航栏,那接下来就写一个简单的二级页面,这个是出了导航页面之外经常用到的。目录结构模板样式方法示例结构一个普通页面的结构应该是如下所示:<!--html--><template><viewclass="list">列表内容</view></template><!--js--><scrip......
  • Go语言 Http库 注册激活用户 实践
    背景需要在公司的平台上面,批量给用户注册,并激活账号信息。主要是通过console接口进行激活和注册,所以要使用到Go语言的http库,在此记录。步骤分解console页面注册获取注册和激活接口需要的信息。通过postman验证接口。关闭服务IP注册限制(公司代码相关)。通过代码进行注册激活。恢......
  • CentOS6.5安装mysql 远程登录
    第1步、yum安装mysql[[email protected]]#yum-yinstallmysql-server直到出现结果: 第2步、设置开机启动[[email protected]]#chkconfigmysqldon这步没提示第3步、启动mysql服务[[email protected]]#servicemysqldstartshell提示: 第4步、修改r......
  • 用户创建密码(Ubuntu)
    一:概述  创建密码一个命令就行,就是passwd。完成用户的创建之后还需要为该用户设置密码,为了提高安全性,Linux系统中的用户应该定期修改自己的密码。注意:root可以设置或更改任何用户密码,普通用户只能修改自己的密码。 命令格式:passwd[选项][用户名] 常用的选项如下:   选......
  • 加拿大本科就读期间被开除学生账号无法登录怎么办?
    加拿大本科就读期间被开除学生账号无法登录怎么办?最近常看到的问题:我的主修课程挂科了,不能毕业怎么办?我的GPA太低了,被院校劝退怎么办?我的出勤率太低,被院校劝退了怎么办?我的论文被老师定为抄袭怎么办?要开学了但是学生账号无法登录,可能被退学了怎么办……其实现在已经是各大院校开学......
  • Webkit 实现页面滚动条美化
    当页面或者某个容器布局内容超出过后,就会有滚动条,但默认的有点丑,经常需要自己来美化一下,这里做个笔记吧./*美化全局的滚动条*/::-webkit-scrollbar{width:4px;height:6px;}::-webkit-scrollbar-corner{display:block;}::-webkit-scrollbar-thumb{......
  • linux shell脚本:创建数据库、数据库同名用户及赋权
    调用脚本如果mysql中已经有了一个mydb0831,会先drop掉,再创建一个空的mydb0831库,同时创建一个名为mydb0831的用户,对这个mydb0831库拥有所有权限。如果机器里未安装mysql,脚本执行会报错。可以从其他相同操作系统安装了mysql的机器里/usr/bin/下复制mysql过来,赋予可执行权限,即可。./cr......
  • 单点登录的原理
    注:单点登录原理是一个重要知识点,也常被问及,很多童鞋照葫芦画瓢搭建过单点登录,但是被问到原理时可能说不出来,下面简单介绍,抛砖引玉,希望对大家有所帮助。单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小......