Я хочу ввести http-перехватчик в сервис. Я запутался, как внедрить его.
В ваших app.module.ts
добавьте перехватчики в массив провайдера, как показано ниже: ~
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
@NgModule({
imports: [HttpClientModule],
providers: [
AuthService, // get the token from here
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
UserService
]
})
В случае, если вам нужен доступ к AuthService в вашем AuthInterceptor для доступа к токену, вы должны внедрить его в конструктор AuthInterceptor и использовать его, как показано ниже: ~
import { Injectable, Injector } from '@angular/core';
export class AuthInterceptor implements HttpInterceptor {
constructor(
private injector: Injector,
private router: Router
) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log('Intercepted!', req);
const authService = this.injector.get(AuthService);
// something like this
const copiedReq = req.clone({
headers: req.headers.set(
'authorization', 'Bearer ' + authService.token
)
});
// Rest of the logic..
}
}
(ваш AuthService может получить токен, а затем вы можете добавить его в localStorage, и затем вы можете приступить к реализации)
Пример аутентификации JWT Рабочее демонстрационное приложение STACKBLITZ
Надеюсь, это поможет!