刷新access_token過期時遇到問題。問題是很少有服務一次向服務器發送請求,我需要解決方案來處理所有這些服務,刷新令牌一次並重復它們。Angular 2攔截器的Angular 2模擬解決方案是什麼
1
A
回答
3
你可以實現一個擴展了HTTP一個類:
@Injectable()
export class CustomHttp extends Http {
constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
super(backend, defaultOptions);
}
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
console.log('request...');
return super.request(url, options);
}
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
console.log('get...');
return super.get(url, options);
}
}
引導您的應用程序時註冊它:
bootstrap(AppComponent, [HTTP_PROVIDERS, ROUTER_PROVIDERS,
provide(Http, {
useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
deps: [XHRBackend, RequestOptions]
})
]);
這樣,您就能夠攔截所有請求在Angular2中。
在此級別,您可以檢查令牌到期日期並執行刷新令牌請求。 flatMap操作符將幫助您在此等待執行刷新令牌請求以執行傳輸請求。
看到這個代碼示例:
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
return me.authService
.refreshAuthenticationObservable()
//Use flatMap instead of map
.flatMap((authenticationResult:AuthenticationResult) => {
if (authenticationResult.IsAuthenticated == true) {
// retry with new token
me.authService.setAuthorizationHeader(request.headers);
return super.request(url, request);
}
return Observable.throw(initialError);
});
}
詳情請參見這個問題:
+0
嗨,蒂埃裏,代碼----返回me.authService ----這個會在哪裏,爲什麼這需要一個自定義的http實現? – shiv
+0
嘿嘿。我們需要一個自定義的http類來透明地截取所有請求,而無需更新現有的代碼(http調用)。你是對的「返回me.authService ...」。我更新了答案。 –
0
Observable.forkJoin(
this.http.get('/app/1').map((res:Response) => res.json()),
this.http.get('/app/2').map((res:Response) => res.json())
).subscribe(
data => {
this.a = data[0]
this.b = data[1]
refreshToken();
},
err => console.error(err)
);
相關問題
- 1. Angular 2模型(ORM)解決方案
- 2. Angular 2:解決querylist?
- 3. Ionic/Angular 2倒數計時器解決方案
- 4. Angular 2模板中的let *是什麼?
- 5. Angular 2 Provider的模擬
- 6. Angular $ .grep()方法的Angular 2中的等價方法是什麼?
- 7. Angular 2 - 解決keyUp事件
- 8. Angular 2:討論實現的現有解決方案
- 9. Angular 2組件中'controllerAs'指令屬性的模擬是什麼?
- 10. Angular 4 - HTTP攔截器
- 11. 測試Angular http攔截器
- 12. Angular http攔截器配置
- 13. 混合內容攔截解決方案
- 14. 在Angular 2中製作模態的最好方法是什麼?
- 15. Angular 2中的組件是什麼
- 16. Angular 2 - 什麼是可聲明的?
- 17. Angular 2中的A2tUiModule是什麼?
- 18. 什麼是$ scope.watch的Angular 2等價物?
- 19. 模擬Angular 2中的長響應
- 20. 2個網站的最佳解決方案是什麼
- 21. 爲什麼Angular 2使用裝飾器?
- 22. Angular選擇退出攔截器行爲
- 23. Angular 2 - 什麼是DI錯誤?
- 24. Angular 2:什麼是@ Input/@輸出別名?
- 25. Angular 2 TS和Angular 2 Dart有什麼區別?
- 26. 解決失敗時重定向Angular 2
- 27. 如何模擬Angular 2路線?
- 28. angular 2打字稿類庫模擬
- 29. Angular $ httpProvider攔截器和$資源
- 30. Angular 4.3 HttpClient:攔截響應
要再次通過服務獲得新的刷新令牌呼叫服務(當刷新令牌到期時)? –