当前位置: 首页 > article >正文

路由守卫重定向页面

  1. 创建 AuthGuard

在 AuthGuard 中,检查用户的登录状态。如果未登录,则保存当前路径,然后导航到登录页面。

import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';

@Injectable({
  providedIn: 'root',
})
export class AuthGuard implements CanActivate {
  constructor(private router: Router) {}

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    const isLoggedIn = /* 判断用户是否登录的逻辑 */;
    if (isLoggedIn) {
      return true;
    } else {
      // 如果未登录,保存目标路径,并跳转到登录页面
      localStorage.setItem('redirectUrl', state.url); // 或者使用 sessionStorage
      this.router.navigate(['/login']);
      return false;
    }
  }
}

  1. 登录页面登录逻辑
    在用户成功登录后,检查是否存在保存的目标路径,存在则跳转到目标路径,不存在则跳转到首页。
    下面展示一些 内联代码片
import { Component } from '@angular/core';
import { Router } from '@angular/router';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
})
export class LoginComponent {
  constructor(private router: Router) {}

  onLoginSuccess() {
    // 执行登录逻辑,例如请求登录API

    // 登录成功后,检查并重定向到目标路径
    const redirectUrl = localStorage.getItem('redirectUrl');
    if (redirectUrl) {
      this.router.navigate([redirectUrl]);
      localStorage.removeItem('redirectUrl'); // 清除保存的路径
    } else {
      this.router.navigate(['/home']); // 默认跳转到首页
    }
  }
}

  1. 在路由模块中配置守卫

在路由配置文件中添加 AuthGuard 到需要保护的路由。


import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AuthGuard } from './auth.guard';

const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'protected', component: ProtectedComponent, canActivate: [AuthGuard] },
  { path: 'login', component: LoginComponent },
  // 其他路由配置
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
})
export class AppRoutingModule {}

解释
当用户尝试访问受保护的页面但未登录时,AuthGuard 会将当前路径信息存储到 localStorage(或 sessionStorage)。
用户成功登录后,登录组件会检查是否存在重定向路径,存在则跳转,否则进入默认首页。


http://www.kler.cn/a/369672.html

相关文章:

  • MySQL 索引存储结构
  • 网关登录校验
  • ODP(OBProxy)路由初探
  • 16、智能驾驶域控的材料回收
  • neo4j-community-5.26.0 install in window10
  • 基于物联网设计的疫苗冷链物流监测系统
  • vxe-table 表格中使用输入框、整数限制、小数限制,单元格渲染数值输入框
  • 雷军救WPS“三次”,WPS注入新生力量,不再“抄袭”微软
  • Kubernetes(K8S) + Harbor + Ingress 部署 SpringBoot + Vue 前后端分离项目
  • WPF+MVVM案例实战(一)- 设备状态LED灯变化实现
  • 【Rust练习】18.特征 Trait
  • Puppeteer 与浏览器版本兼容性:自动化测试的最佳实践
  • Javaee---多线程(一)
  • ubuntu系统
  • 重写(外壳不变)
  • Linux下的文件系统(进程与文件)
  • Spring Cloud Alibaba实战入门之Nacos注册中心(四)
  • 青少年编程与数学 02-002 Sql Server 数据库应用 16课题、安全机制
  • HardLockUp
  • Rust 力扣 - 5. 最长回文子串
  • [ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-7 通关详解 (附靶机搭建教程)
  • PostgreSQL的奥秘:从Read-through到Write-around的缓存机制
  • 什么是服务器?服务器与客户端的关系?本地方访问不了网址与服务器访问不了是什么意思?有何区别
  • Spark 之 SparkListenerBus
  • DDRPHY数字IC后端设计实现系列专题
  • 从头学PHP之数组输出基本函数