У меня есть одна страница входа в систему как часть моего приложения. Я хочу отключить кнопку «Назад» после успешного выхода из системы, чтобы пользователь не мог вернуться.
Я думаю, вам следует использовать canActivate и/или canActivateChild, а не предотвращать события браузера. Что, если я не «вернусь», а введу URL-адрес?





Вы не можете отключить его, вы можете только предотвратить его. Просто проверьте статус входа и перенаправьте его на определенную страницу, если они перенаправлены на страницу, на которой нужно было войти в систему.
на самом деле мы можем отключить его с помощью authguard. Ниже приведен пример.
Вы можете добавить защиту, чтобы наблюдать и решать, может ли пользователь получить доступ к странице или нет, вместо того, чтобы отключать события браузера. CanActivate — спаситель
CanActivate (Interface)
Interface that a class can implement to be a guard deciding if a route can be activated. If all guards return true, navigation will continue. If any guard returns false, navigation will be cancelled. From official documentation of Angular
Здесь я добавляю код, который сейчас использую. Надеюсь, это поможет понять, как его реализовать.
import { CanActivate, ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
import { IdentityService } from './identity.service';
@Injectable()
export class LoginGuard implements CanActivate {
constructor(private identityService: IdentityService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (this.identityService.isLoggedIn()) { // determine if the uder is logged in from this method.
return true;
}
this.router.navigate(['/login']);
return false;
}
}
добавьте этот класс LoginGuard в провайдера в вашем app.module.ts
providers: [{ provide: LoginGuard, useClass: LoginGuard }]
затем добавьте canActive в маршрут, чтобы защитить его.
{
path: 'dashboard',
component: DashboadComponent,
canActivate: [LoginGuard]
}
да Auth gurad был полезен здесь.
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs';
import { AuthService } from './auth-service.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService) {
}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return this.authService.getisLoggedIn();
}
}
Добавьте защиту авторизации в app.module.ts
{ path: 'home', component: HomeComponent, canActivate: [AuthGuard] }
{ path: 'logout', component: LogoutComponent , canActivate:[AuthGuard]}
Чтобы после выхода из системы мы могли отключить кнопку «Назад».
Добавьте защиту авторизации как часть app.module.ts провайдеры: [AuthGuard]
Вы можете попробовать ниже, это сработало для меня.
https://www.npmjs.com/package/angular-disable-browser-back-button
import { NgModule } from '@angular/core';
import { BackButtonDisableModule } from 'angular-disable-browser-back-button';
@NgModule({
...
imports: [
...
BackButtonDisableModule.forRoot()
],
...
})
export class AppModule {}
вы можете управлять историей браузера. проверить developer.mozilla.org/en-US/docs/Web/API/History_API