Перехватчик токена не добавляет токен в запрос на получение - PullRequest
0 голосов
/ 25 января 2019

Прежде всего, извините за мой плохой английский: D.это ошибка, которую я получаю, когда пытаюсь выполнить запрос на получение с авторизацией токена на предъявителя:

ОПЦИИ http://myUrl/balanca/web/Transportadora 401 (неавторизованный) Доступ к XMLHttpRequest по адресу http://myUrl/balanca/web/Transportadora'из источника 'http://localhost:4200' был заблокирован политикой CORS: Ответ на предполётный запрос не проходит проверку контроля доступа: он не имеет статуса HTTP ok.

 OPTIONS http://myUrl/balanca/web/Transportadora 401 (Unauthorized)
 Access to XMLHttpRequest at 
 'http://myUrl/balanca/web/Transportadora' from origin 
 'http://localhost:4200' has been blocked by CORS policy: Response to 
 preflight request doesn't pass access control check: It does not have HTTP 
 ok status.

Я пробовал несколько способов редактирования заголовка http-запроса, я думаю, что я что-то не так делаю в этой части помещения токена в заголовок.Я уверен, что URL не является проблемой или токеном, потому что я проверил на почтальоне, и он работал там.

токен-перехватчик

import { Injectable, Injector } from '@angular/core';
import { HttpInterceptor,  HttpHandler, HttpRequest, HttpEvent, 
HttpResponse } from '@angular/common/http' 
import { AuthService } from './auth.service';
import { Observable } from 'rxjs';

@Injectable()
export class TokenInterceptorService implements HttpInterceptor {

constructor(private injector: Injector,
          private authService: AuthService){}

intercept(req: HttpRequest<any>, next: HttpHandler): 
Observable<HttpEvent<any>> {
if (this.authService.getToken()) {
  const authReq = req.clone({
    headers: req.headers.set(
     'Authorization', 'Bearer ' + this.authService.getToken()
    )  

  });
  console.log(authReq)
  console.log('Making an authorized request');
  req = authReq;
}
return next.handle(req)
}

}

Сервис

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
import {ITransportadora} from './transportadora/transportadora'

@Injectable()
export class DashboardEventService {

private _transportadoraUrl = 
"my_url";

constructor(private http: HttpClient) { }

getTransportadora(): Observable<ITransportadora[]>{
  return this.http.get<ITransportadora[]>(this._transportadoraUrl)

}
}

Компонент

export class TransportadoraListComponent implements OnInit {
public transportadoras = [];
constructor(private _dashEventService: DashboardEventService) { }

 ngOnInit() {
   this._dashEventService.getTransportadora()
   .subscribe(data => this.transportadoras = data)

 }

}

Модуль приложения

import { AuthGuard } from './auth.guard';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { AppRoutingModule } from './app-routing.module';

import { AppComponent } from './app.component';
import { DashboardComponent } from './dashboard/dashboard.component';
import { LoginComponent } from './login/login.component';
import { AuthService } from './auth.service';
import { DashboardEventService } from './dashboardEvent.service';
import { TokenInterceptorService } from './token-interceptor.service';
import { TransportadoraListComponent } from 
'./transportadora/transportadora-list.component';
import { TransportadoraDetailComponent } from 
'./transportadora/transportadora-detail.component';


@NgModule({
 declarations: [
  AppComponent,
  LoginComponent,
  DashboardComponent,
  TransportadoraListComponent,
  TransportadoraDetailComponent
],
imports: [
  BrowserModule,
  FormsModule,
  HttpClientModule,
  AppRoutingModule
],
providers: [AuthService, AuthGuard, DashboardEventService, 
HttpClientModule, TokenInterceptorService, 
{
provide: HTTP_INTERCEPTORS,
useClass: TokenInterceptorService,
multi: true
}],
bootstrap: [AppComponent]
})
export class AppModule { }
...