Передача токена аутентификации в пользовательскую библиотеку Angular 7 - PullRequest
0 голосов
/ 20 февраля 2020

Мне нужно создать пользовательскую библиотеку Angular 7, которая может получать токен авторизации из своего приложения, чтобы он мог использовать тот же токен авторизации, что и остальная часть приложения, для доступа к определенным API. Я пытался внедрить токен авторизации через библиотеку для Root () в app.module.ts, но токен авторизации недоступен при загрузке приложения.

Есть ли какие-либо предложения о том, как это сделать sh? Короче говоря, мне нужно, чтобы пользовательская библиотека принимала токен авторизации, чтобы он был готов при каждом использовании API во время выполнения.

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

В моем приложении angular я просто использую перехватчик, чтобы прочитать токен JWT и использовать его по запросу HTTP / HTTPS.

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

import {Observable} from 'rxjs';
import {AuthService} from '../services/auth.service';

@Injectable()
export class TokenInterceptor implements HttpInterceptor {
    constructor(public service: AuthService) {
    }

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

        if (this.service.isAuthenticated()) {
            request = request.clone({
                setHeaders: {
                    Authorization: `Bearer ${this.service.token}`
                }
            });
        }
        return next.handle(request);
    }
}

Я также определяю модуль root следующим образом:

@NgModule({
  declarations: [
    ...
  ],
  imports: [
    ...

    AppRoutingModule,
  ],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: TokenInterceptor,
      multi: true
    }
  ]
  ,
  bootstrap: [AppComponent]
})
export class AppModule {
}

Токен берется во время выполнения из службы, внедренной в перехватчик. Если вам нужно просмотреть весь проект, вы можете найти его на github .

. Возможное решение - делегировать при определении перехватчика приложения возможность извлекать токен JWT. Таким образом, все вызовы приложений будут обрабатываться одинаково.

Надеюсь, это поможет.

0 голосов
/ 20 февраля 2020

одно возможное решение может быть достигнуто с помощью localStorage путем заключения соглашения о том же keyName между angular -app и custom-library, что хорошо, если пользователь библиотеки может настроить его.

localStorage.setItem('apiData', JSON.stringify(apiDataObject));

const apiDataObject = JSON.parse(localStorage.getItem('apiData'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...