2017-01-03 3 views
2

トークンの有効期限が切れているかどうかを確認するスタンドアロンサービスを作成しようとしています。angular2 - jwtトークンの有効性を確認する間隔を設定します。

通常、Intervalを開始し、tokenNotExpired()またはJwtHelper.isTokenExpired()を使用してJWTトークンをテストします。しかしAngular2では、このようなことをどうやって処理するのか分かりません。それは容易ではありませんよね? :)

すべてのトークンの妥当性は現在home.componentで実行されていますが、これは私が避けようとしていることであり、この懸念をスタンドアロンサービスに分けるつもりです。

以下は、それがどのように機能しているかを示す仮説です。

  • ユーザーがログイン中
  • ホームコンポーネントは
  • を初期化するには(セッションcheck.service.validateに加入)
  • セッション検証チェック

の出力ここで問題をチェックObservableを使用するか、単純な間隔を開始するだけですか?コンポーネント内の定期的な呼び出しを処理するには、最も適切で最も適切なコンセプトは何ですか?

home.component.ts

import { Component, OnInit } from '@angular/core'; 
import { Http } from '@angular/http'; 
import { Router } from '@angular/router'; 
import { SessionCheckService } from '../services/session-check.service'; 


@Component({ 
    moduleId: module.id, 
    selector: 'home', 
    templateUrl: '../templates/home.component.html', 
    styleUrls: [ '../styles/home.component.css' ], 
    providers: [ SessionCheckService ] 
}) 
export class HomeComponent implements OnInit { 
    private jwt: string; 
    private decodedJwt: string; 

    constructor (
    private router: Router, 
    private http: Http 
    private sessionCheckService: SessionCheckService 
    // private jwtHelper: JwtHelper 
) {} 

    ngOnInit(): void { 
    this.jwt = localStorage.getItem('id_token'); 
    // this.decodedJwt = null; //this.jwt && this.jwtHelper.decodeToken(this.jwt); 
    var s = this.sessionCheckService.validate(this.jwt); 
    s.subscribe((res) => { 
     console.log(res) 
    }) 
    } 

    public logout() { 
    localStorage.removeItem('id_token'); 
    this.router.navigate(['login']); 
    } 
} 

セッションcheck.service.ts

import { JwtHelper } from 'angular2-jwt'; 
import { Injectable } from '@angular/core'; 
//import { AuthHttp, JwtHelper } from 'angular2-jwt'; 

import { Observable } from 'rxjs'; 
import 'rxjs/add/operator/toPromise'; 

@Injectable() 
export class SessionCheckService { 
    constructor(private jwtH: JwtHelper){}; 

    validate(token:string): Observable<boolean>{ 
     return new Observable.interval(500).flatMap(() => { 
      this.jwtH.isTokenExpired(token) 
     }); 
    } 
} 
+0

角度2-jwt(https://github.com/auth0/angular2-jwt) – MMK

+0

ユーザーが '/ home'ルートを開こうとするたびに、トークンをチェックしています。しかし私の意図は、その生涯を通してトークンを定期的にチェックすることです。 – Alexus

答えて

1

戻り値がthis.jwtHelper.isTokenExpired(token)から正しくマッピングされていません。以下の解決策を参照してください。

セッションcheck.service.ts

@Injectable() 
export class SessionCheckService { 
    constructor(private jwtHelper: JwtHelper){}; 

    public validate(token:string): Observable<any> { 
     return Observable.interval(1000).map((x) => this.jwtHelper.isTokenExpired(token)); 
    } 
} 

それでも私は、これはトークンの有効期限を処理し、最終的にログアウト手順をトリガするための合理的な方法であるかどうかを知りたいです。

0

app.module.ts原因サービスに次の行を追加しsingletonであり、このラインは、複数のインスタンスを作成します。サービスの

providers: [ SessionCheckService ] 
+0

申し訳ありませんが、それはサービスが到達可能ではないということではありません...それはちょうど私が 'home.component'内の間隔をどのように扱うべきか、間隔のためのサービス。 – Alexus

関連する問題