2017-11-23 12 views
0

私はIonicをはじめて使用しており、認証されていないユーザーをログインページにリダイレクトしようとしています。Ionic 3 unauthenticated user redirect

ログインすると、ユーザーはローカルストレージ内に保存されているjson-web-tokenを取得します。また、トークンが有効かどうかを確認するloggedIn()メソッドを持つ認証サービスもあります。私HomePageコンポーネント内

import { HttpClient } from '@angular/common/http'; 
import { Injectable } from '@angular/core'; 
import { tokenNotExpired } from 'angular2-jwt'; 
import { Storage } from '@ionic/storage'; 


@Injectable() 
export class AuthServiceProvider { 

constructor(
    public http: HttpClient, 
    public store: Storage, 
) { } 

... 

public loggedIn(): boolean { 
    return tokenNotExpired('__local/_ionickv/token'); 
} 

... 

} 

ページがロードされる前に、ユーザーがionViewCanEnter()で、ログインしている場合、私はその後、確認してください。

import { Storage } from '@ionic/storage'; 
import { Component } from '@angular/core'; 
import { IonicPage, NavController, NavParams } from 'ionic-angular'; 
import { LoginPage } from './../login/login'; 
import { AuthServiceProvider } from './../../providers/auth-service/auth-service'; 

@IonicPage({ 
name: 'home', 
}) 
@Component({ 
    selector: 'page-home', 
    templateUrl: 'home.html', 
}) 
export class HomePage { 

constructor(
    public navCtrl: NavController, 
    public navParams: NavParams, 
    public auth: AuthServiceProvider, 
    public store: Storage, 
) { } 

ionViewCanEnter(): boolean { 
    if(!this.auth.loggedIn()){ 
    this.navCtrl.setRoot(LoginPage); 
    } 
    return this.auth.loggedIn(); 
} 

public logout(): void { 
    this.auth.logout(); 
    this.navCtrl.setRoot(LoginPage); 
} 

} 

ログインせずにメンバーエリアに入ると、ページが読み込まれません。これは問題ありません。残念ながら私はリダイレクトされていない、私は空白のページに残っています。

@ionic/cli-utils : 1.19.0 
ionic (Ionic CLI) : 3.19.0 
@ionic/app-scripts : 3.1.0 
Ionic Framework : ionic-angular 3.9.2 
Node : v8.9.1 
npm : 5.5.1 
OS : Linux 4.10 

答えて

3

それは

は、回避策として、現在、私は、これはこれを理解するために私に多くの時間を保存したsetTimeoutで

ionViewCanEnter(){ 
    if(!this.authService.authenticated){ 
     setTimeout(()=>this.navCtrl.setRoot('login')) 
    } 
    return this.authService.authenticated 
    } 
+0

感謝をリダイレクトラップする必要がありイオン性の問題のようなものです – Nico