All,
Before implementing the auth guard, I was able to hide my Navbar from login and registration screen. By reading the route events in component.ts and hiding the nav-bar by ngIf. After I implemented the auth guard the route made by auth guard to login page is not hiding the nav bar below is my code..
Here my auth guard service will check whether user is authenticated or not from auth service(Which will get data from cognito). Now, how can I hide the nav bar from routes happening from auth guard. Please help
app.component.html
<app-toolbar *ngIf="isShowNavbar" ></app-toolbar>
<router-outlet></router-outlet>
app.component.ts
import { Component,OnInit } from '@angular/core';
import {AuthorizationService} from "./authorization.service";
import { Router, ActivatedRoute, UrlSegment, NavigationEnd } from '@angular/router';
import { Observable } from 'rxjs';
import { first, distinctUntilChanged, throttleTime } from '../../node_modules/rxjs/operators';
@Component({
// tslint:disable-next-line: component-selector
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
isLoggedIn$: Observable<boolean>;
isShowNavbar: boolean;
constructor(private auth: AuthorizationService,private router: Router) {}
ngOnInit() {
this.isLoggedIn$ = this.auth.IsLoggedIn;
this.router.events.pipe(throttleTime(100), distinctUntilChanged()).subscribe((navEnd: NavigationEnd) => {
console.log(navEnd.url)
if (navEnd) {
if (navEnd.url === "/login" || navEnd.url ==="/register" ) {
this.isShowNavbar = false
} else {
this.isShowNavbar = true;
}
}
});
}}
route.ts
const routes: Routes = [
{path: '', redirectTo: '/cards', pathMatch: 'full',canActivate : [ AuthGuardService ] },
{ path: 'shareditems', component: ShareditemsComponent,canActivate : [ AuthGuardService ] },
{ path: 'home', component: AppCardsComponent,canActivate : [ AuthGuardService ] },
{ path: 'calendar', component: CalendarComponent,canActivate : [ AuthGuardService ] },
{path: 'lan', component: LanComponent,canActivate : [ AuthGuardService ] },
{path:'login', component:LoginComponent},
{path: 'register', component:RegisterComponent },
{path:'nav', component:CommonComponent,canActivate : [ AuthGuardService ] }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
auth.guard service:
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean>
{
return this.auth.isAuthenticated()
.then(data => {
return Promise.resolve(true);
}).catch(err => {
this._router.navigate(['/login']);
return Promise.resolve(false);
});
}
}