My Code is like below, I am using 3rd party login (openAM) for my application. when ever I got 401, I should redirect the application to another URL from there user will be logged in.
I user http interceptors to check the status and redirect to login. Question1: Is this approach is correct ?
Question2: Translations are not happening.
check handleHttpResponseCodes method. In that "unauthorisedMessage" is not translating. Not only that any message is not translating. is anything wrong with my code.
import { Injectable, Injector } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
import { AuthService } from 'app/blocks/auth/auth.service';
import { TranslateService } from 'ng2-translate';
import { AlertService } from '../../core/services/common';
import { Router } from '@angular/router';
import * as jsToaster from 'toastr';
@Injectable()
export class AppHttpInterceptor implements HttpInterceptor {
constructor(
private injector: Injector,
private router: Router,
private translate: TranslateService
) {}
intercept(req: HttpRequest < any > , next: HttpHandler): Observable < HttpEvent < any >> {
// console.log(req);
if (!window.navigator.onLine) {
// check to see if there's internet
// if there is no internet, throw a HttpErrorResponse error
// since an error is thrown, the function will terminate here
return Observable.throw(new HttpErrorResponse({
error: 'NO_INTERNET'
}));
} else {
// else return the normal request
return this.handleResponse(next, req);
}
}
handleResponse(next, req) {
return next.handle(req)
.do((ev: HttpEvent < any > ) => {
if (ev instanceof HttpResponse) {
//console.log('ev in the do: ', ev);
}
})
.catch((response: any) => {
if (response instanceof HttpErrorResponse) {
this.handleHttpResponseCodes(response);
} else {
console.log('::UNKNOWN ERROR::', response);
}
return Observable.throw(response);
});
}
handleHttpResponseCodes(exception) {
let authService = this.injector.get(AuthService);
let translate = this.injector.get(TranslateService);
let alertService = this.injector.get(AlertService);
const router = this.injector.get(Router);
switch (exception.status) {
case 401: //UNAUTHORIZED
debugger;
this.translate.get('unauthorisedMessage').subscribe((res: string) => {
debugger;
this.showToast(res, '401');
});
setTimeout(() => {
authService.login_openAM();
}, 3000);
break;
case 400: //BAD REQUEST OR FR SESSION TIME OUT
this.translate.get('loginSessionExpiredMessage').subscribe((res: string) => {
debugger;
this.showToast(res, '400');
});
setTimeout(() => {
authService.loginSessionExpired();
}, 2000);
break;
case 403: // FORBIDDED ACCESS
//TODO
break;
case 502: // BAD GATEWAY
break;
case 503: //SERVICE UNAVAILABLE
jsToaster.error("SERVICE UNAVAILABLE", "503");
break;
case 504: //GATEWAY TIMEOUT
jsToaster.error("SERVICE UNAVAILABLE", "CODE:504-GATEWAY TIMEOUT");
break;
}
console.log(':Service Exception::', exception);
}
showToast(title, body, typeOfToast, waitTime) {
setTimeout(() => {
jsToaster[typeOfToast](body, title);
}, waitTime);
}
}
from Unable to use Ng2 Translate service in Http Interceptors Angular 2 , Angular 6
No comments:
Post a Comment