2017-10-25 2 views
1

Ich muss Header mit allen HTTP-Anfragen anhängen. Aber jetzt funktioniert keiner meiner api call.Fehler beim Anhängen von http-Headern in ionic3?

In dem unten genannten Code ist die erste Funktion meine HTTP-Anfrage get. Die zweite Funktion hängt Header an.

//http service to get 
get(subUrl?:string, params?:object) { 
     let optionalParam:URLSearchParams = new URLSearchParams(); 
     if (params) { 
      for (let item in params) { 
       optionalParam.set(item, params[item]); 
      } 
     } 
     return this.createCustomHeader() 
      .switchMap((headers)=> { 
       console.log('headers inside swithmap', headers); 
       return this.http.get(this.url + subUrl, 
        {search: optionalParam, headers: headers}) 
        .map(response => response.json()) 
        .catch(this.handleError) 
      }); 
    } 


//function to append header 

    private createCustomHeader() { 
     return Observable.create(obse=> { 
      this.dbservice.getToken().subscribe(res=> { 
       let headers = new Headers(); 
       console.log('fetch token', res); 
       headers.append('Authorization ', `Bearer ${ res.access }`) 
       headers.append('Content-Type', 'application/json'); 
       headers.append('Accept', 'application/json'); 
       obse.next(headers); 
       obse.complete(); 
      }) 
     }); 
    } 

Funktion

getToken() : Observable<any>{ 
    return Observable.create(obse=>{ 
     let db = new SQLite(); 
     db.create({ 
      name: "data.db", 
      location: "default" 
     }).then((db: SQLiteObject) => { 
      db.executeSql('SELECT token,refresh_token FROM login',[]) 
       .then(res => { 
        if (res.rows.length > 0) { 
         for (var i = 0; i < res.rows.length; i++) { 
          this.token=(res.rows.item(i).token); 
          this.refresh_token=(res.rows.item(i).refresh_token); 
          if(this.token && this.refresh_token){ 
           // console.log('Both token found'); 
           const tok={'access':this.token ,'refresh':this.refresh_token}; 
           // console.log('edfghjhgfdfghjhgfdsdfghj--99--',tok); 
           obse.next(tok); 
          }else { 
           obse.next(false); 
          } 
          obse.complete(); 
         } 
        }else 
        { 
         obse.next(false); 
         obse.complete(); 
        } 
       }) 
       .catch(e => { 
        obse.error(e); 
        // console.log(e); 

       }); 
     }).catch(e => { 
      // console.log(e); 
      obse.error(e); 

     }); 
    }); 

} 

bitte korrigieren Sie mich, Token zu erhalten. Danke

+0

Bitte erläutern Sie diese "return Observable.create" in createCustomHeader? –

+0

tatsächlich bin ich holen Token von db –

Antwort

1

Nur wenige Dinge beachten

  • Sie das Token bereit, von db nach Plattform holen sollten.
  • Sobald Sie den Token abgerufen haben, verwenden Sie BehaviourSubject als Nächstes. in Ihrem Datenbank-Dienst einrichten, ein Verhalten Subjekt

    tokenSub= new BehaviorSubject({}); accessToken(){ return this.tokenSub.getValue(); }

    In dem Rückruf von getToken()

    this.tokenSub.next(tok);

    Anfügen Kopf
    `Private createCustomHeader() {

    let token = this.dbservice.accessToken(); 
    let header = new Headers(); 
    if (token.hasOwnProperty('access')) { 
        header.append('Authorization', 'Bearer ' + token['access']); 
    } 
    header.append('Content-Type', 'application/json'); 
    header.append('Accept', 'application/json'); 
    return header; 
    

    } `

+0

Dank Kumpel, ich war auf den Token vor der Plattform bereit –

0

Deklarieren Header außerhalb der Methode.

private headers = new Headers({ 'Content-Type': 'application/json' }); 

Und innerhalb der Methode setzen Header wie unten.

this.headers.set('Authorization ', `Bearer ${ res.access }`) 
this.headers.set('Accept', 'application/json'); 

Hoffe diese Hilfe.

+0

Noch eine Sache sind Sie in der Lage, Antwort Zugriffstoken protokollieren? – Amir

+0

Ja, aber keiner der HTTP-Anrufe funktioniert –

+0

, so dass Sie Token erhalten können. aber wenn du nach api rufst; Werte werden nicht zurückgegeben, oder? – Amir

Verwandte Themen