2017-05-26 2 views
0

Ich verstehe nicht vollständig, wie OAuth2-Zugriffstoken aus einem Versprechen (oidc-client-js) API-Code bereitgestellt wird, der mit Swagger-CodeGen generiert wird.Konfigurieren des OAuth2-Zugriffstokens auf typescript-angular2-Client

Es ist einfach, konstante Werte zur Verfügung zu stellen, aber wie kann ich unten ändern, um das Zugriffstoken des Benutzers von oidc-client-js zu erhalten? Ich würde gerne den "richtigen" Weg wissen. Es wäre einfach genug, dieses Token irgendwo in einer globalen Variablen zu speichern.

@NgModule({ 
    imports: [ 
    CommonModule, 
    ApiModule.forConfig(() => new Configuration({ 
     accessToken: 'my-access-token' //this can also be a() => string function 
    })) 
    ], 

In normalen Komponenten mit OnInit, kann ich das Token in einem Versprechen von einer Instanz von OIDC-Client-Usermanagern bekommen. Diese beiden Teile zusammenzubringen ist das, was mich verwirrt. Einer scheint wie eine statische Konfiguration zu sein und der andere muss das Versprechen eines Singletons akzeptieren.

this.userSubscription = this.authService.getUser().subscribe((user) => { 
    if (user) { 
     this.access_token = user.access_token; 
    } 
}); 

Alle Korrekturen an Dingen, die ich falsch mache, würden auch geschätzt werden. Dies ist mein erster Prototyp mit Angular.


aktualisieren

Nach Bens Vorschlag Anwendung und Zeit nehmen APP_INITIALIZER (die experimentell markiert und sehr spärlich dokumentiert imo), fühlte es sich wie viel des Guten zu verstehen. Ich endete mit dem folgenden benutzerdefinierten Anbieter für die Konfigurationsklasse, die in Typoskript-Angular2 Service-Code generiert mit Swagger-CodeGen injiziert wird:

providers: [ 
    AuthService, 
    AuthGuardService, 
    { 
    provide: Configuration, 
    useFactory: (authSvc: AuthService) => new Configuration({accessToken: authSvc.getAccessToken.bind(authSvc)}), 
    deps: [AuthService], 
    multi: false 
    } 
] 

ich meine AuthService geändert des Benutzers neueste access_token auf den Dienst zu speichern. Die Methode getAccessToken() wird aus dem generierten Swagger-CodeGen-Code aufgerufen und gibt den neuesten JWT zur Verwendung in HTTP-Headern zurück. Es fühlt sich sauber an und es funktioniert. Bitte lassen Sie mich wissen, wenn (und warum) dies der falsche Weg ist, um mein Problem zu lösen.

Antwort

Verwandte Themen