参考:https://blog.csdn.net/yw00yw/article/details/89381043
    https://www.cnblogs.com/starof/p/9012193.html

    路由守卫的作用,在做登录等权限验证的时候,需要用到路由守卫,辅助进行验证。

    比如:使用angular做的是单页应用,如果不用任何权限控制的话,就算使用了用户登录功能,假如我们需求是当用户登录成功之后才能看其他的页面。但是如果不用任何权限控制,我们用户就算登录失败,可以直接在url地址中输入需要跳转页面路由,则就会看到不许要被看到的内容。

    所以:上述情况下,我们需要通过路由守卫来达到我们的目的。

    通过angular的路由守卫,就可以设置权限验证,当用户登录成功之后,才能跳转到其他的页面,否则只能跳转到用户登录界面等待用户登录。

    使用方式:
    通过angular官网提供的CanActivate: 要求认证进行认证。

    应用程序通常会根据访问者来决定是否授予某个特性区的访问权。 你可以只对已认证过的用户或具有特定角色的用户授予访问权,还可以阻止或限制用户访问权,直到用户账户激活为止。

    • CanActivate: 处理导航到某路由的情况。
    • CanDeactivate: 处理从当前路由离开的情况。
    • Resolve: 在路由激活之前获取路由数据。

    ng generate guard auth/auth 创建权限验证文件

    1. // auth.guard.ts
    2. import { Injectable } from '@angular/core';
    3. import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
    4. @Injectable({
    5. providedIn: 'root'
    6. })
    7. export class AuthGuard implements CanActivate {
    8. constructor(private router: Router) {
    9. }
    10. // 进入路由守卫
    11. canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    12. return this.checkLogin();
    13. }
    14. //第一个参数 范型类型的组件
    15. //根据当前要保护组件 的状态 判断当前用户是否能够离开
    16. canDeactivate(component: ProductComponent){
    17. return window.confirm('你还没有保存,确定要离开吗?');
    18. }
    19. checkLogin(): boolean {
    20. // 判断本地有没有token
    21. const token = sessionStorage.getItem('access_token');
    22. // 如果token有值,表示登录成功,继续跳转,否则跳转到首页
    23. if (token) { return true; }
    24. this.router.navigate(['/login']);
    25. return false;
    26. }
    27. }

    在路由里面配置app-routing.module.ts中配置

    路由守卫 - 图1