MrBradford
MrBradford

Reputation: 43

Unable to Databind localstorage to iron-ajax headers

I'm using the latest Polymer (1.2.0), and I'm having trouble with databinding from iron-localstorage to the iron-ajax headers field. I'm not seeing the Authorization header set when I inspect the request. I've verified the request works when I just create a valid headers object with no databinding.

Am I doing something wrong, or is it not designed to be used like this?

<iron-localstorage name="userToken" value="{{localtoken}}" use-raw></iron-localstorage>

<iron-ajax url="api/twitter/v1/private/gettweets" last-response="{{data}}" auto
           headers= '{"Authorization":"Bearer [[localtoken]]}"'
           handle-as="json">
</iron-ajax>
<iron-list items="[[data.futuretweets]]" as="item">
    <template>
        <div>
            datetime: <span>[[item.datetime]]</span>
            text: <span>[[item.text]]</span>
        </div>
    </template>
</iron-list>

Upvotes: 1

Views: 656

Answers (3)

Alessio
Alessio

Reputation: 11

I've found a little workaround. I'm using loopback with authentication service enabled and I'm saving the authentication token with iron-localstorage. The problem I've found is that the "auto" of iron-ajax let start the request when any ( almost ) of the iron-ajax parameter change. When the request start the localstorage value hasn't been populated yet

<iron-localstorage name="appdata" value="{{user}}"></iron-localstorage>

and

<iron-ajax auto="{{user.id}}" headers$='{"Authorization" :"{{user.id}}"}' url="/api/data" handle-as="json" last-response="{{data}}"></iron-ajax>

the workaround is inside auto="{{user.id}}". While user isn't loaded the user.id is false. When loaded it become something that match as true. That cause also a change inside the iron-ajax header attribute and cause the "auto" request send to get fired.

Upvotes: 1

Pascal Gula
Pascal Gula

Reputation: 1173

I think you have a typo error in your compound binding, here is a corrected version:

<iron-ajax url="api/twitter/v1/private/gettweets" last-response="{{data}}" auto
           headers= '{"Authorization":"Bearer [[localtoken]]"}'
           handle-as="json">
</iron-ajax>

[EDIT] since it is not working, try with a computed function like this:

<iron-ajax url="api/twitter/v1/private/gettweets" last-response="{{data}}" auto
           headers='_computeHeaders(localtoken)'
           handle-as="json">
</iron-ajax>

where

_computeHeaders(localtoken) {
  return {"Authorization": "Bearer " + localtoken};
}

Upvotes: 1

clockmaker
clockmaker

Reputation: 11

Shouldn't:

_computeHeaders(localtoken) {
  return '{"Authorization":"Bearer ' + localtoken + '"}';
}

Instead be:

_computeHeaders: function(localtoken){
  return '{"Authorization":"Bearer ' + localtoken + '"}';
}

Upvotes: 1

Related Questions