Saya menggunakan perpustakaan keycloak-angular dengan proyek Angular 6. Saya mencoba mengonversi janji keycloakService.logout() menjadi yang dapat diamati:

keycloakLogout(): void {
  defer(() => this.keycloakService.logout(config.frontUrl + '/home')).subscribe(() => {
    localStorage.removeItem('authenticationToken');
    this.accountService.authenticate(null)
  });
}

Masalah saya adalah setiap kali saya memanggil metode ini, authenticationToken tidak dihapus dari localStorage.

Ada ide?

2
Amir Choubani 7 Juli 2020, 11:30

1 menjawab

Jawaban Terbaik

Seperti yang disebutkan oleh trincot, logout() dialihkan, sehingga tidak ada lagi kode JavaScript yang dijalankan pada halaman saat ini. Solusinya adalah menghapus pola berlangganan dan menggunakan .then() sebagai gantinya atau pola async/menunggu.

async keycloakLogout() {
  await this.keycloakService.logout(config.frontUrl + '/home');
  }

onLogout() {
    localStorage.removeItem('authenticationToken');
    this.accountService.authenticate(null);
    this.loginService.keycloakLogout();  // ----> here is the call of the previous method.
  }
1
Amir Choubani 7 Juli 2020, 09:08