Angular2: Prevent authenticated users from accessing specific routes

后端 未结 3 1353
礼貌的吻别
礼貌的吻别 2020-12-31 04:43

I\'ve defined some routes in my main.ts file:

const routes: RouterConfig = [
  { path: \'\', component: HomeComponent },
  { path:          


        
3条回答
  •  庸人自扰
    2020-12-31 05:06

    You could write a guard like this:

    import { Injectable } from '@angular/core';
    import {
        ActivatedRouteSnapshot,
        CanActivate,
        RouterStateSnapshot
    } from '@angular/router';
    
    import { AuthService } from './your-auth.service';
    
    @Injectable()
    export class UserAccessGuard implements CanActivate {
        constructor(private authService: AuthService) {
        }
    
        canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
            return route.data['onlyGuests'] != authService.isAuthenticated();
        }
    }
    

    And then use it in your route definition:

    const routes: Routes = [
      { path: '', redirectTo: 'home' },
    
      // accessible only to guests
      {
          path: '',
          component: HomeComponent,
          data: { onlyGuests: true },
          canActivate: [ UserAccessGuard ]
      },
      {
          path: 'login',
          component: LoginComponent,
          data: { onlyGuests: true },
          canActivate: [ UserAccessGuard ]
      },
    
      // accessible only to authenticated users
      {
          path: 'dashboard',
          component: DashboardComponent,
          canActivate: [ UserAccessGuard ]
      }
    ];
    

提交回复
热议问题