これを投稿する前に私は他の多くの同様の質問に行き、解決策を見つけることができませんでした。 like Angular 2 - Inject authorization token before each Http requestHTTPコールの前に非同期的に認可トークンを取得する
私はHTTPリクエストを作成するための承認トークンを提供するAWSセッションを使用しています。今セッションを取得することは、トークンをリフレッシュする必要性に応じて、非同期操作にすることができます。
問題: セッションを取得してからHTTP呼び出しを行うことができません。
バージョン角度5、RxJs
のAuthServiceのgetセッション機能5.5.2。
getSession(): Observable<any> {
const sessionOb = new Subject<CognitoUserSession>();
// AysnFn4session is a callback implementation
AysnFn4session((err, session) => {
console.log('Found Session');
sessionOb.next(session);
sessionOb.complete();
});
return sessionOb;
}
APIサービスのget関数 - トレイル1
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
return this._authService.getSession().switchMap((session) => {
console.log('dasdasd');
let token = '';
if (session) {
token = session.getIdToken().getJwtToken();
options = options || {};
options.headers = options.headers || new Headers();
options.headers.append('Authorization', token);
}
return this._http.get(url, options);
});
}
APIサービスのget関数 - トレイル2
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
return this._authService.getSession().pipe(mergeMap((session) => {
console.log('So what??');
let token = '';
if (session) {
token = session.getIdToken().getJwtToken();
options = options || {};
options.headers = options.headers || new Headers();
options.headers.append('Authorization', token);
}
return this._http.get(url, options);
}));
}
ここで私はこのAPIを呼び出すしていますか。
getItemInfo(item) {
return this._apiHttp.get('/assets/data/item.json')
.map(res => {
console.log(res);
return res.json();
})
.subscribe(data => console.log(data),
err => console.log(err),
() => console.log('done'));
}
は、今の問題は、単にprints.andないHTTP呼び出しが行われている場合のコンソールの両方です。
Found Session
done
私は私が完了したHTTPリクエストを取得するためにswitchmapのmergermapを使用してミスを作っていますかを理解できないのです。
これはあなたの 'getSession'メソッドと同じですか?これは' cognitoUser.getSession() 'ですか? – LLai
@LLai cognitoUser.getSessionは、コールバック関数を使用するAWS coginito identiotyのメソッドです。混乱を避けるために問題のコードを単純化する。 – gaurang171