2017-11-04 10 views
0

Polymer 1 * und FirebaseWie Eisen Ajax async nach Kopf Rückkehr in berechneten Bindung

Wie kann tun, um eine Asynchron-Betrieb, bei dem this.$$('#ironAjax').generateRequest(); ist Anruf nach return '{"Authorization": "Bearer ' + token + '"}'; aufzurufen? Ich muss den Header-Wert zurückgeben und dann die Iron-Ajax-Anfrage aufrufen.

<iron-ajax 
    url="[[HOST]][[LISTINGS]]?foo=foo" 
    id="ironAjax" 
    handle-as="json" 
    headers="[[setAuth()]]", 
    on-error="errorHandler" 
    loading="{{ironLoading}}" 
    last-response="{{listings}}"></iron-ajax> 

pageActivated: function(activated) { 
    if (activated) { 
     this.setAuth(); 
    } 
    }, 

setAuth:()=> { 
    firebase.auth() 
    .onAuthStateChanged((token) => { 
     return '{"Authorization": "Bearer ' + token + '"}'; 

     this.$$('#ironAjax').generateRequest(); // NEED TO CALL AFTER 
               // HEADER IS SET 

    }) 

Antwort

0

konnte ich die Situation mit einer direkten Modifikation an den Header zu handhaben. Hoffentlich kann jedes anderes in der gleichen Situation helfen:

Verhalten:.

<script> 
    AuthIronAjax = { 
    rawSetAuth: (user, ajax) => { 
     if (user) { 
     user.getIdToken().then((token) => { 
      ajax.headers['Authorization'] = 'Bearer ' + token; 
      ajax.generateRequest(); 
     }); 
     } 
    }, 

    setAuth: function (ajax) { 
     firebase.auth() 
     .onAuthStateChanged((user)=> this.rawSetAuth(user, ajax)); 
    } 
    }; 
</script> 

Element wird verwendet in Hinweis: Eisen-Seiten verwendet werden mit einer impliziten Host-Eigenschaft Bindung activated:

observers: ['pageActivated(activated)'], 

    behaviors: [AuthIronAjax], 

    pageActivated: function(activated) { 
    if (activated) { 
     this.setAuth(this.$.ironAjax); 
    } 
    }, 
Verwandte Themen