I have downloaded an open source tamplate of angular9 from a website. When I run the tamplate it shows the dashboard/default by default. I want that it should run auth/signin by default instead of dashboard/default.
Routing structure that has already been defined by the auther of the template is following. app-routing.module.tc
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AdminComponent } from './theme/layout/admin/admin.component';
import {AuthComponent} from './theme/layout/auth/auth.component';
const routes: Routes = [
{
path: '',
component: AdminComponent,
children: [
{
path: '',
redirectTo: 'dashboard/default',
pathMatch: 'full'
},
{
path: 'dashboard',
loadChildren: () => import('./demo/dashboard/dashboard.module').then(module => module.DashboardModule)
},
{
path: 'layout',
loadChildren: () => import('./demo/pages/layout/layout.module').then(module => module.LayoutModule)
},
{
path: 'basic',
loadChildren: () => import('./demo/ui-elements/ui-basic/ui-basic.module').then(module => module.UiBasicModule)
},
{
path: 'forms',
loadChildren: () => import('./demo/pages/form-elements/form-elements.module').then(module => module.FormElementsModule)
},
{
path: 'tbl-bootstrap',
loadChildren: () => import('./demo/pages/tables/tbl-bootstrap/tbl-bootstrap.module').then(module => module.TblBootstrapModule)
},
{
path: 'charts',
loadChildren: () => import('./demo/pages/core-chart/core-chart.module').then(module => module.CoreChartModule)
},
{
path: 'maps',
loadChildren: () => import('./demo/pages/core-maps/core-maps.module').then(module => module.CoreMapsModule)
},
{
path: 'sample-page',
loadChildren: () => import('./demo/pages/sample-page/sample-page.module').then(module => module.SamplePageModule)
}
]
},
{
path: '',
component: AuthComponent,
children: [
{
path: 'auth',
loadChildren: () => import('./demo/pages/authentication/authentication.module').then(module => module.AuthenticationModule)
}
]
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
You need to create a Guard that implements CanActivate
for that:
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router, private authService: AuthService) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if (!this.authService.isAuthenticated) {
this.router.navigateByUrl('/auth');
return false;
}
return true;
}
}
Then use this guard on the routes you want to protect:
const routes: Routes = [
{
path: '',
component: AdminComponent,
children: [
{
path: '',
redirectTo: 'dashboard/default',
pathMatch: 'full',
canActivate: [AuthGuard] // <--- Your guard here
}
...
Check more about Angular guard on the Angular documentation.