私のシナリオでは、ルートがアクティブになっているときに、Windowsユーザーを認証/ログインすることができます。だから、私は単純にユーザーが黙認されているかどうかを検証し、そうでなければトークンを生成するようにサーバーを呼び出し、canActivate()にtrueを返すことを期待して、おそらく期待どおりに動作しません。コードのサブスクリプション付き角4+ガード
作品:
auth.guard.ts
import { Observable } from 'rxjs/Observable';
import { CanActivate, Router, ActivatedRouteSnapshot } from '@angular/router';
import { Injectable } from '@angular/core';
import { AuthService } from './../data/auth.service';
import { TokenService } from '../auth/token.service';
import { of } from 'rxjs/observable/of';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(
private loginService: AuthService,
private tokenService: TokenService,
private router: Router) {
}
canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {
const operation = route.data.operation;
if (!this.tokenService.isAuthenticated() && !this.login()) {
console.log('canActive1: ', false);
return of(false);
}
console.log('canActive: ', true);
return of(true);
}
login() {
this.loginService.getToken().subscribe((user) => {
console.log('token returned..');
if (user && user.token) {
this.tokenService.storeToken(user.token);
return true;
}
return false;
});
}
}
コンソール:
- canActivate1:返された偽
- トークン..
ねえ活性化れませんでした!答えはどうやって行ったのですか?何か助けになりましたか? :) – Alex