Отправка токена JWT сотруднику службы угловых услуг - PullRequest
0 голосов
/ 18 марта 2019

Для разрабатываемого приложения Angular 7 я использую HttpInterceptor для отправки токена при каждом запросе. Это выглядит примерно так:

export class JwtInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    let currentUser = JSON.parse(localStorage.getItem('currentUser'));
    if (currentUser && currentUser.token) {
        request = request.clone({
            setHeaders: {
                Authorization: `Bearer ${currentUser.token}`
            }
        });
    }
    return next.handle(request);
}

Чтобы превратить это приложение в прогрессивное веб-приложение, я использую @ angular / service-worker и @ angular / pwa. Конфигурация не сложная, я подумал, так что похоже, что она должна работать. Но проблема в том, что я не могу найти способ улучшить этого работника, всегда отправляя токен с каждым запросом. Я знаю, что местное хранилище недоступно в работнике, но сейчас это не проблема. Сначала мне нужно найти способ, как работает HttpInterceptor. Есть ли стандартное решение этой проблемы?

1 Ответ

0 голосов
/ 18 марта 2019

Я использую Angular 7 и таким образом пишу Interceptor.

    import { Injectable } from '@angular/core';
    import {
        HttpInterceptor,
        HttpRequest,
        HttpResponse,
        HttpHandler,
        HttpEvent,
        HttpErrorResponse
    } from '@angular/common/http';

    import { Observable, throwError } from 'rxjs';
    import { map, catchError } from 'rxjs/operators';

    @Injectable()
    export class HttpConfigInterceptor implements HttpInterceptor {

            constructor() { }

            intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
                var token = localStorage.getItem('token');
                if (token) {
                    request = request.clone({ headers: request.headers.set('Authorization', 'Bearer ' + token) });
                }

                if (!request.headers.has('Content-Type')) {
                    request = request.clone({ headers: request.headers.set('Content-Type', 'application/json') });
                }
                request = request.clone({ headers: request.headers.set('Accept', 'application/json') });


                return next.handle(request).pipe(
                    map((event: HttpEvent<any>) => {
                        if (event instanceof HttpResponse) {
                            console.log('event--->>>', event);
                        }
                        return event;
                    }),
                    catchError((error: HttpErrorResponse) => {
                        let data = {};
                        data = {
                            reason: error && error.error.reason ? error.error.reason : '',
                            status: error.status
                        };
                        return throwError(error);
                    }));
        }
...