Учу angular, пишу приложения, которое могло бы общаться с сервером. Аутентификация происходит за счет токена JWT. Вот например ситуация сейчас, я направляю запрос серверу для проверки валидности токена. В ответ мне приходит ответ, из него я выдернул ошибку кое как. Но в конце при throw и возвращения observable ошибка дополнительно вываливается. Явно, не правильно обрабатываю ошибку. Подскажите гуру ангуляра и javascript'а.
authService
export class AuthService {
backendUrl = "http://127.0.0.1:8000/";
constructor(private http: Http,
private router: Router) { }
verifyToken(token: string): Observable<{}>{
let urlVerify = 'api-token-verify'
let headers = new Headers({'Content-Type':'application/json'});
let options = new RequestOptions({headers: headers});
return this.http.post(this.backendUrl+'api-token-verify/', {token}, options)
.map((response: Response) => response.json())
.catch((error: Response) => this.handleError(error));
}
authLogin(login: string, password: string){
let urlLogin = 'api/v1/auth/login';
let headers = new Headers({'Content-Type':'application/json'});
let options = new RequestOptions({headers: headers});
return this.http.post(this.backendUrl+urlLogin, {username: login, password: password}, options)
.map((response: Response) => response.json())
.catch(this.handleError);
}
handleError(error: any){
this.router.navigate(['/login']);
let err_array = error.json()
return Observable.throw(err_array['non_field_errors']);
}
}
authenticationGuard
export class AuthenticationGuard implements CanActivate {
constructor(private authService: AuthService,
private router: Router){
}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if(localStorage.getItem('Token')){
let token = localStorage.getItem('Token');
return this.authService.verifyToken(token).map(res => {
if(res['token'] === token){
return true;
}
console.log(res);
return false;
});
}else{
this.router.navigate(['/login']);
return false;
}
}
}