I have implemented an interceptor to add authorization header that i can make seucred api. I get an error when i inject this service in any app module // "Cannot instantiate cyclic dependency! HttpClient ("[ERROR ->]"): in NgModule AppModule in ./AppModule@-1:-1"
// auth interceptor to add authorization bearer
import { Injectable } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor
} from '@angular/common/http';
import { Auth } from './auth.service';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(public auth: Auth) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${this.auth.getToken()}`
}
});
return next.handle(request);
}
}
// Auth service
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';
@Injectable()
export class Auth {
// Store profile object in auth class
userProfile: Object;
public token: string;
constructor(private router: Router, private http: HttpClient) {
// set token if saved in local storage
const currentUser = JSON.parse(localStorage.getItem('currentUser'));
this.token = currentUser;
}
login(username: string, password: string) {
const headers = new HttpHeaders()
.set('Content-Type', 'application/x-www-form-urlencoded')
.set('Accept', 'application/json');
const params = new HttpParams().set('username', username).set('password', password)
.set('grant_type', 'password');
return this.http.post('http://rrrrr/token', params.toString(),
{ headers }).subscribe(data => {
this.token = data['access_token'];
console.log(this.token);
},
err => {
console.log('Error occured');
});
}
getToken() {
return this.token;
}
logout(): void {
// clear token remove user from local storage to log user out
this.token = null;
localStorage.removeItem('currentUser');
}
public authenticated(): boolean {
// Check whether the current time is past the
// access token's expiry time
const expiresAt = JSON.parse(localStorage.getItem('expires_at'));
return new Date().getTime() < expiresAt;
}
}