redirectTo
は、ログインしたときcanActivate
のリンクにリダイレクトできませんでした。 canActivateのリンクにリダイレクトしたときにAngular2 + redirectToが機能しない
redirectTo
は私がログアウトしたときにログインした後、それは
/index
に私の
/login
コンポーネントと
redirectTo
をredirectToしかし、私がログインしていたときに、それは
''
に固執正常に動作します。
authGuard
にconsole.log
を追加しました。リダイレクトURL「/ index」は、開発ツールでクラッシュすることなくスティックで''
の状況に移行しました。
コメント後、canActivate
のように、redirectTo
は以前のようにうまく機能します。ところで
、他の状況でcanActivate
作業罰金と私のauthGuard(redirecTo
を除外)
ここに私のアプリ-routing.module.tsは
/* import... */
const appRoutes: Routes = [
{ path: 'login', component: LoginComponent },
{ path: '', redirectTo : '/index', pathMatch: 'full' },
{ path: '**', component: PageNotFoundComponent }
];
/* ngmodel and export ... */
だとここで私のインデックスrouting.moduleです。 TS
/* import ... */
const indexRoutes: Routes = [
{
path: 'index',
component: IndexComponent,
canActivate: [AuthGuard], //<- if comment this will work
},
];
/* ngmodel and export ... */
は、ここに私のauth-guard.module.tsだ
/* import ... */
@Injectable()
export class AuthGuard implements CanActivate {
constructor(
private authService: AuthService,
private router: Router
) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let url: string = state.url;
//redirectTo did get in here
console.log(url); //<-- this show /index
return this.checkLogin(url);
}
checkLogin(url: string): boolean {
if (this.authService.login_data && (this.authService.login_data.userprofile || !this.authService.login_data.need_login)) {
return true;
}
this.authService.get_login_data()
.subscribe(
data => {
this.authService.login_data = data;
if (data.userprofile || !data.need_login) {
return true;
}
this.authService.redirectUrl = url;
this.router.navigate(['/login']);
return false;
},
error => { this.authService.errMsg = <any>error;}
);
}
}
ちなみに私はangular4.0.1にプロジェクトを更新しました
ありがとうございました。
UPDATE:
私が観察可能
にブールから私のガードリターンを変更しましたが、それはまだ動作しません。
ここに私が使用したコードがあります。私のコンソールで
checkLogin(url: string): Observable<boolean> {
if (this.authService.login_data && (this.authService.login_data.userprofile || !this.authService.login_data.need_login)) {
console.log('gonna return observable true');
return Observable.of(true);
//return true;
}
this.authService.get_login_data()
.subscribe(
data => {
this.authService.login_data = data;
if (data.userprofile || !data.need_login) {
console.log('in subscribe and gonna return observable true');
return Observable.of(true);
//return true;
}
this.authService.redirectUrl = url;
this.router.navigate(['/login']);
return Observable.of(false);
//return false;
},
error => { this.authService.errMsg = <any>error;}
);
}
は、私が得たin subscribe and gonna return observable true
UPDATE:
チェックした後、この
AuthGuard doesn't wait for authentication to finish before checking user
を確認した後に問題がcanActivate
が待機していないのかもしれサブスクライブ終了。あなたAuthGuard
のcheckLogin()
で
これは私の最初の質問です。私は読んだ後にそれを良くするでしょう。ありがとう。 – douasin
どのようなエラーが発生していますか? – Vignesh
エラーはありませんが、動作しません。 – douasin