Не работает: угловой HttpInterceptor вызов веб-API.401 несанкционированная ошибка - PullRequest
0 голосов
/ 24 октября 2018

Я пишу свой первый HTTPInterceptor в моем клиенте Angular.Я гуглил некоторые учебники и скопировал код в мой проект.В своем веб-интерфейсе API я добавил следующее до объявления класса:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]

Я добавил следующее до моего метода:

[Route("api/Account/GetUsersAsync")]
[HttpGet]
[Authorize(Roles = "admin")]
public async Task<IActionResult> GetUsersAsync()

В своем коде Angular я добавил следующий перехватчиккласс:

import { HttpInterceptor, HttpRequest, HttpHandler, HttpUserEvent, HttpEvent } from "@angular/common/http";
import { Observable } from "rxjs/Observable";
import { LoginService } from "../services/login.service";
import 'rxjs/add/operator/do';
import { Injectable } from "@angular/core";
import { Router } from "@angular/router";

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
 public userToken: string;

    constructor(private router: Router, public login: LoginService) { }

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

this.userToken =  this.login.getToken();

        if (req.headers.get('No-Auth') == "True")
            return next.handle(req.clone());

        if (localStorage.getItem('userToken') != null) {
            const clonedreq = req.clone({
                headers: req.headers.set("Authorization", "Bearer " + localStorage.getItem('userToken'))
            });

            console.log('clonedreq-------------------> ' + clonedreq.headers);
            return next.handle(clonedreq)
                .do(
                succ => { },
                err => {
                    if (err.status === 401)
                        this.router.navigateByUrl('/home');
                }
                );
        }
        else {
            this.router.navigateByUrl('/home');
        }
    }
}

Из моего компонента я делаю этот вызов:

  getUsers() {
     this.userService.getUsers()
    .subscribe(( data: any[] )=> {
      this.users = data;
      (error) => {
               this.statusMessage = 'Problem with the service. Please try again later.';  
              console.error('getUsers ==========> ' + error);
            }
      ;

      this.chRef.detectChanges();
      const table: any = $('table');
      this.dataTable = table.DataTable();
    });
  }

В моем сервисе я делаю этот вызов:

 getUsers() {
    return this.http.get('http://localhost:8888/api/account/GetUsersAsync')
      .map(response => response.json())
      .catch(this.handleError);
  }

Покаотладка, точка останова срабатывает, когда я пытаюсь войти в систему и аутентифицировать пользователя по веб-API.Но я не увидел, чтобы точка останова снова сработала, когда я нажал на ссылку Маршрут / меню пользователя.В провайдере я добавил UserService, но он все равно не работает.Любая помощь приветствуется.

providers: [LoginService,AuthGuard, UserService,
{
  provide : HTTP_INTERCEPTORS,
  useClass : AuthInterceptor,
  multi : true
}],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...