トークンの有効期限が切れているかどうかを確認するスタンドアロンサービスを作成しようとしています。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)
});
}
}
角度2-jwt(https://github.com/auth0/angular2-jwt) – MMK
ユーザーが '/ home'ルートを開こうとするたびに、トークンをチェックしています。しかし私の意図は、その生涯を通してトークンを定期的にチェックすることです。 – Alexus