Skip to content

Instantly share code, notes, and snippets.

@totynho
Created November 10, 2017 20:05
Show Gist options
  • Save totynho/76d2dfc80fc189e03811243e166fd377 to your computer and use it in GitHub Desktop.
Save totynho/76d2dfc80fc189e03811243e166fd377 to your computer and use it in GitHub Desktop.
// INTERCEPTOR
import {Injectable, Injector} from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor, HttpErrorResponse, HttpResponse
} from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';
import {AuthenticationService} from "./authentication-service.service";
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
constructor(private inj:Injector) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const auth = this.inj.get(AuthenticationService);
if(request.url !== auth.authEndpoint && request.url !== auth.refreshEndpoint){
request = request.clone({
setHeaders: {
"X-Token": `${auth.getToken()}`
}
});
}
return next.handle(request).do((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
// do stuff with response if you want
}
}, (err: any) => {
if (err instanceof HttpErrorResponse) {
if (err.status === 401 && err.url !== auth.authEndpoint && err.url !== auth.refreshEndpoint) {
console.log("erro chegou ate aqui");
return auth
.refreshToken()
.subscribe((token) => {
const authReqRepeat = request.clone({
setHeaders: {
"X-Token": `${auth.getToken()}`
}
});
console.log('*Repeating httpRequest*', authReqRepeat);
auth.retryRequest(authReqRepeat);
});
}
}
});
}
}
// Atualização do Token
refreshToken() {
let rtoken = JSON.parse(sessionStorage.getItem('currentUser')).refreshToken;
let headers = new Headers({'RefreshToken': rtoken});
let options = new RequestOptions({headers: headers});
return this.http.get(this.refreshEndpoint, options)
.map((response:Response) => {
// login successful if there's a jwt token in the response
let token = response.json() && response.json()['auth-jwt'];
if (token) {
// set token property
this.token = token;
// store username and jwt token in local storage to keep user logged in between page refreshes
// sessionStorage.setItem('currentUser', JSON.stringify({ username: username, token: token, refreshToken: refreshtoken }));
var currentUser = JSON.parse(sessionStorage.getItem('currentUser'));
sessionStorage.setItem('currentUser', JSON.stringify({
username: currentUser.username,
token: token,
refreshToken: rtoken
}));
}
}).catch((error:any) => Observable.throw(error || 'Server error'));
}
// Refazendo as requisições que deram erro
retryRequest(req)
{
this.httpclient.request(req).subscribe(_=>console.log(_,'deni'));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment