我认为如果使用
Observable
取而代之的是s。
如果你真的考虑了那个建议,那么
verifyToken
import { of, Observable } from 'rxjs';
verifyToken(): Observable<boolean> {
const token = this.getToken();
return token ? this.http
.post(this.url + '/token/verify/', {
'token': token
})
.pipe(
tap(res => localStorage.data = JSON.stringify(res)),
map(
res => true,
error => false
)
) : of(false)
}
然后,在你的守卫下,你只需要这样做:
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable < boolean > | Promise < boolean > | boolean {
const token = this.auth.getToken();
const url = "/token/verify/";
if (!token) {
this.router.navigate(['/login']);
return false;
}
return this.auth.verifyToken().pipe(
catchError(err => {
console.log('Handling error locally and rethrowing it...', err);
this.router.navigate(['/login']);
return of(false);
})
);
}
这是一个
Working Demo