2017-09-27 4 views
0

J'essaie de vérifier si l'utilisateur actuel existe (connecté) ou non et de le retourner dans la garde d'authentification.auth garde avec firebase sdk

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { 
    firebase.auth().onAuthStateChanged((user: firebase.User) => { 
     if (user) { 
     return true; 
     } 
     return false; 
    }); 
    } 

Mais je suis arrivé cette erreur:

A function whose declared type is neither 'void' nor 'any' must return a value.

On dirait que les déclarations de retour ne sont pas liés à la fonction canActivate.

+1

Vous devez ajouter '' return' avant firebase' (et changer la signature de fonction pour revenir '' Observable ). –

+0

c'est la solution mais pas le pourquoi. – mnlfischer

Répondre

1

En tant que votre méthode canActivate garde, le type de retour est booléen et vous ne retournez aucune erreur.

Vous pouvez renvoyer un booléen pour résoudre ce problème. Mais dans votre cas je peux voir que votre type de retour sera observable et à l'intérieur de l'observable vous voulez retourner vrai ou faux.

Alors vous changez de garde t.

vous devez faire 2 chose comme ci-dessous

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): : boolean | Observable<boolean> | Promise<boolean> { 
    return firebase.auth().onAuthStateChanged((user: firebase.User) => { 
     if (user) { 
     return true; 
     } 
     return false; 
    }); 
    } 

Vous devez vérifier quel est le type de retour de firebase.auth().onAuthStateChanged() normalement ce genre de méthodes retourne observables. Si tel est le cas, alors vous devez changer comme ci-dessous

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): : boolean | Observable<boolean> | Promise<boolean> { 
    return firebase.auth().onAuthStateChanged().map((user: firebase.User) => { 
     if (user) { 
     return true; 
     } 
     return false; 
    }); 
    } 
+0

c'est tout. Je vous remercie! – mnlfischer

+0

Vous êtes les bienvenus! content que ça a aidé :) –