vue登录退出_vue怎么跳转到另一个页面

vue登录退出_vue怎么跳转到另一个页面

需求描述:

1、有的页面需要登录后才能访问,未登录时,输入页面路由会自动跳转到登录页,登录成功后再跳回刚才要访问的页面
2、有的页面可以访问,但是页面中的某些操作按钮,没有登录的话需要跳到登录页,登陆成功后返回该页面,登录后再操作按钮可以进行下一步操作

实现方法

一、在 router 文件下的 “index.ts” 路由配置中添加页面访问权限设置

给路由添加 meta 属性 “requiresAuth”,
如果需要登录后访问- – -“requiresAuth: true”
不需要登录后访问- – -“requiresAuth: false”

代码示例:
index.ts:

routes: [ { 
    path: '/', name: 'home', component: HomeView, meta: { 
    title: '首页', requiresAuth: false } }, { 
    path: '/login', name: 'login', component: () => import('../views/login/index.vue'), meta: { 
    title: '登录', requiresAuth: false } }, { 
    path: '/order', name: 'order', component: () => import('../views/order/index.vue'), meta: { 
    title: '我的订单', requiresAuth: true } }, ] 

二、在 “main.ts” 文件中添加路由守卫

根据路由的 to.meta.requiresAuth 属性值,判断要访问的路由是否需要登录后才可访问,getToken() 是获取 token,登录后服务器端会生成一个 token,需要客户端保存一下该 token 到本地 cookie 中,getToken() 需要自己实现。

代码示例:
main.ts:

import router from './router' router.beforeEach(async (to: any, from, next) => { 
    // 判断是否需要登录后才可访问 if (to.meta.requiresAuth) { 
    // 登录后才能访问 if (!getToken()) { 
    // 没有登录 next(`/login?redirect=${ 
     to.path}`) } else { 
    // 已经登录 next() } } else { 
    // 不用登陆就可访问 if (getToken()) { 
    // 如果已经登录,访问登录页面的话跳转到首页 if (to.path == '/login') { 
    next({ 
    path: '/' }) } } next() } }) 

三、登录页添加登录后跳转设置

代码示例(伪代码):

import { 
    ref } from 'vue' import { 
    useRoute, useRouter } from 'vue-router' const router = useRouter() const route = useRoute() const back = router.options.history.state.back const redirectUrl = route.query.redirect const redirectUrlStr = ref('') if (redirectUrl) { 
    redirectUrlStr.value = redirectUrl.toString() } // 调用登录接口 、、、(根据实际操作编写代码) if(登陆成功) { 
    // 返回上一页或者首页 if (redirectUrl) { 
    router.replace({ 
    path: redirectUrlStr.value }) } else if (back) { 
    router.go(-1) } else { 
    router.replace({ 
    path: '/' }) } } 

注意事项:

1、如果登录成功后,使用的 router.push() 返回上一页,回到登陆前的上一页后,再浏览器的“返回上一页” 箭头,返回的是去登录页,而不是 要登录才可以访问的页面的前一页

2、如果没有登录时浏览器中直接输入要登录后才可以访问的页面 a 路由,会跳转到登录页,但登录页 的 “router.options.history.state.back” 中没有 记录到是由 路由a 跳转到登录页的;
如果是访问一个不用登陆可以访问的页面 b,在该页面进行具体操作按钮,才跳出登陆页,此时登录页的 “router.options.history.state.back” 中会有 该 页面 b 的路由信息

3、router.options.history.state.back 只有上一页的路由信息,没有更多的路由历史记录

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/152041.html

(0)
上一篇 2024年 6月 29日 下午5:04
下一篇 2024年 6月 29日 下午5:08

相关推荐

关注微信