Условие на угловой трассе
Во -первых, если первый пользователь уже вошел в первую вкладку, и он будет перенаправлен на панель мониторинга, когда первый пользователь откроет вторую вкладку в том же браузере (вставит URL-адрес входа в систему), он автоматически перенаправится на панель мониторинга, не переходя на страницу входа. на странице входа есть определенные маршруты, к которым может пройти неаутентифицированный пользователь,
login.component.ts
linkToMarket(): void {
this.sidenav.close().then(() => {
this.router.navigate([UrlConstants.Market]);
});
}
на странице "Маркет" (во второй вкладке) пользователь может вернуться на страницу входа, но, к сожалению, он будет перенаправлен через панель управления (поскольку первый пользователь уже вошел в систему), поскольку я реализовал это [перенаправление на панель мониторинга, если пользователь вошел в систему][1], Как я могу убедиться, что на второй вкладке есть другой пользователь, при возврате со страницы рынка он не будет перенаправлять на панель мониторинга, а на страницу входа, могу ли я задать условие на маршруте или использовать Authguard(CanActivate)?
компонент detail.login
ngOnInit(): void {
if (this.authenService.isUserAuthenticated()) {
this.router.navigate([UrlConstants.UserSetting])
}
}
market.component.ts
linkToSignIn(): void {
this.router.navigate([UrlConstants.Login], { queryParams: { returnUrl: UrlConstants.Market } });
if (this.authenService.isUserAuthenticated()) {
this.router.navigate([UrlConstants.Login])
}
}
[1]: https://stackru.com/questions/44121164/angular-2-redirect-if-user-is-logged-in
1 ответ
Я не понимаю относительно первого и второго пользователя в вашем вопросе.
Но в целом для защиты определенных маршрутов, требующих входа в систему, используйте средство защиты маршрутов. Одна из основных целей охраны маршрута - гарантировать, что кто-то не получит доступ к маршруту, если он не соответствует определенным критериям (таким как вход в систему).
Вот пример одного из моих охранников:
import { Injectable } from '@angular/core';
import { CanActivate, CanLoad, ActivatedRouteSnapshot, RouterStateSnapshot, Router, Route } from '@angular/router';
import { Observable } from 'rxjs';
import { AuthService } from './auth.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate, CanLoad {
constructor(private authService: AuthService,
private router: Router) { }
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return this.checkLoggedIn(state.url);
}
checkLoggedIn(url: string): boolean {
if (this.authService.isLoggedIn) {
return true;
}
// Retain the attempted URL for redirection
this.authService.redirectUrl = url;
this.router.navigate(['/login']);
return false;
}
}
Затем вы прикрепляете охрану к маршруту в конфигурации маршрута:
{
path: 'products',
loadChildren: './products/product.module#ProductModule',
canActivate: [AuthGuard],
data: { preload: false },
},
Это то, что вы спрашиваете?