I\'ve defined some routes in my main.ts file:
const routes: RouterConfig = [
{ path: \'\', component: HomeComponent },
{ path:
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 ]
}
];