2017-10-18 2 views
0

Dans ma situation, je travaille avec auth guard CanActivate() restreignant l'accès de l'utilisateur pour chaque route, mais la valeur de la condition est prise à partir de l'objet Promise de la requête http. Comment puis-je accéder à la promesse then() et catch() et le renvoyer à la fonction CanActivate(): Boolean?Comment retourner le résultat de la promesse then()/catch() à la fonction contenant la promesse?

Mon code ressemble à ceci.

// On AuthService 
verfifyUser(): Promise<any> { 
    return this.http 
     .get(`api/auth/verify-user`, { headers: this.headers }) 
     .toPromise() 
     .then(res => res.json() as any); 
} 


// On AuthGuardService 
CanActivate(): Boolean { 
    this.authSrv.verfifyUser(some_user).then(result => { 
     // return true 
    }).catch(err => { 
     // return false 
    }); 
} 

Je n'arrive toujours pas à résoudre ce problème.

Répondre

4

Le type de retour de la méthode canActivate de l'interface CanActivate est Observable<boolean>|Promise<boolean>|boolean.

Vous pouvez utiliser la version canActivate(): Promise<boolean> et renvoyer une promesse. Dans la fonction que vous pouvez écrire

canActivate() : Promise<boolean> { 

    return new Promise(resolve => { 

     this.authSrv.verfifyUser(some_user).then(result => { 
     resolve(true); 
     }).catch(err => { 
     resolve(false); 
     }); 

    }); 

} 
+0

Salut à tous je vais essayer celui-ci mais juste curieux du résultat, il est encore valide pour l'utiliser sur '{chemin: « un peu de chemin/», composant: ClientComponent, canActivate: [AuthGuard]} '? –

+0

@ ShiftN'Tab Oui bien sûr, c'est une variante de la fonction 'canActivate' –

+0

Je suis très reconnaissant! –