这个问题有点类似
Ionic 2 – Get token from Storage value and set Header before HTTP Request(不重复)
@H_403_29@但问题与从本地存储返回值有关.
我需要为所有请求设置默认标头(授权标记).
必须是一个典型的问题,但找不到解决方案.以及大多数可用信息 – 关于为每个请求设置它.这很简单,但不太合理. – 如果可能的话,为什么为每个请求设置为什么.
我试过了:
情况1:
import {Injectable} from "@angular/core"; import {BaseRequestOptions,RequestOptions,RequestOptionsArgs} from "@angular/http"; import { Storage } from '@ionic/storage'; @Injectable() export class MyRequestOptions extends BaseRequestOptions { constructor(private storage: Storage) { super(); this.headers.set('Content-Type','application/json'); } merge(options?: RequestOptionsArgs): RequestOptions { const newOptions = super.merge(options); console.log("setting auth header"); function setAuthHeader(storage) { return storage.get('jwt_token').then(value => { newOptions.headers.set('Authorization',`Bearer ${value}`); return newOptions; }); } return setAuthHeader(this.storage).then(()=>{ return newOptions; }) } }
在这种情况下,它只是没有编译,但它是为了表明我想做什么.
案例#2:
@Injectable() export class MyRequestOptions extends BaseRequestOptions { constructor(private storage: Storage) { super(); this.headers.set('Content-Type','application/json'); } merge(options?: RequestOptionsArgs): RequestOptions { const newOptions = super.merge(options); console.log("setting auth header"); return this.getApiToken().flatMap( data => { newOptions.headers.set('Authorization',`Bearer ${data}`); return newOptions; }); } getApiToken(): Observable<RequestOptions> { return Observable.fromPromise(this.storage.get('jwt_token')); } }
(它类似于提到的SO主题),但.flatMap()抛出一个错误:
argument of type '(data: Headers) => RequestOptions' is not assignable to parameter of type '(value: Headers,index: number) => ObservableInput<{}>'. Type 'RequestOptions' is not assignable to type 'ObservableInput<{}>'. Type 'RequestOptions' is not assignable to type 'ArrayLike<{}>'. Property 'length' is missing in type 'RequestOptions'.
案例#3:
let api_token = await this.storage.get(‘jwt_token’); – >等待在这里不起作用.
任何想法?