Cześć,
tworze SPA, które opieram się o RESTowe API. Atuoryzacja w tym api odbywa się przez Bearer token.
A więc napisałem sobie interseptor, który dodaje odpowiedni nagłówek.
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if(!(req.headers.get("Content-Type") === "application/x-www-form-urlencoded")) {
const authReq = req.clone({
headers: req.headers.set('Authorazation', 'Bearer ' + this.callToken()
.then(resp => resp)
.catch(err => console.log(err)))
});
return next.handle(authReq)
}else {
return next.handle(req);
}
}
i te część działa dobrze. Token, który dostaje do autoryzacji muszę pobrać z usługi ponieważ wygasa co 5 minut
Napisałem dwie metody, które pobierają ten token, jedną za pomocą callback, a drugą z użyciem promise
callToken(): Promise<any> {
let url = 'url';
let body = "body";
let promise = fetch(url, {
body: body,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
method: 'POST',
});
return promise
.then(resp => resp.json())
.then(json => json.access_token);
}
callForToken(): string {
let url = 'url';
let body = 'body';
let option = {
headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
};
let token;
this.http.post<Token>(url, body, option).subscribe(
res => {
token = res.access_token;
}
);
return token;
}
Przy wykorzystaniu promice dostaje w nagłówku
A jak chce skorzystać z callback to też nie wiem do końca jak to zrobić z uwagi na to, że jest to asynchroniczne zapytanie i nie mogę wyciągnąć wartości po za metodę.
W przypadku użycia promise jak wypisze sobie do konsoli ten token to jest prezentowany poprawnie, a jak chce umieścić w nagłówku to widać do wyżej.
Jakiś pomysł, na rozwiązanie ?
- screenshot-20180529210530.png (1 KB) - ściągnięć: 122