Я сделал это раньше, сделав в моем сервисе метод getHeaders(token)
:
getHeaders(token) {
return new HttpHeaders().set('Authorization', `Bearer ${token}`);
}
Затем при запросах просто добавьте это к запросу следующим образом:
this.http.post(url, body, this.getHeaders(token));
Существует также HttpInterceptor, который может автоматизировать это для запросов, вот статья для этого: https://www.intertech.com/Blog/angular-4-tutorial-handling-refresh-token-with-new-httpinterceptor/
Я сделал это, используя Firebase Auth для моих токенов, как это,Вот файл token.interceptor.ts:
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
afAuth: any;
constructor(
private inj: Injector
) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.afAuth = this.inj.get(AngularFireAuth);
return this.getToken().pipe(
switchMap(token => {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});
return next.handle(request);
})
);
}
getToken() {
return Observable.fromPromise(this.afAuth.auth.currentUser.getIdToken());
}
}
Затем вам необходимо предоставить это в ваш app.module верхнего уровня, например:
{ provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true }
Для этого здесь устанавливается токен авторизации для каждого HTTP-запроса, который обрабатывается автоматически, поэтому вам не нужно ждать токен перед выполнением запросов.Имейте в виду, что это очень специфично для Firebase Auth, поскольку именно это дает мне токен JWT.Надеюсь, что это может помочь!