setting the access token on every ajax request

帅比萌擦擦* 提交于 2019-12-08 12:15:27

问题


I'm using the new version of ember-simple-auth, which doesn't automatically anymore add access token to ajax requests that are sent to the server.

I'm using oauth2 authentication, and due to a bad documentation I somehow cannot figure out what and where it would be the right way to set the header token for each ajax request that I do.

Should this code be under the authorize function of the custom authorizer or somewhere else?

this.get('session').authorize('authorizer:some-authorizer', (headerName, headerValue) => {
  xhr.setRequestHeader(headerName, headerValue);
});

Any information on setting up this correctly would be highly appreciated!


回答1:


You could do it like this:

let userToken;
this.get('session').authorize('authorizer:some-authorizer', (headerName, headerValue) => {
    userToken = headerValue;
});

$.ajax({
    url: "Your Url",
    // ...
    beforeSend: function(xhr){
        xhr.setRequestHeader('Authorization', userToken);
    }
})

If you don't want to do that on every request, you could create your own customAjaxCall somewhere and just use that one:

export default function customAjaxCall(session, url) {
    let userToken;
    session.authorize('authorizer:some-authorizer', (headerName, headerValue) => {
        userToken = headerValue;
    });

    return $.ajax({
        url: url,
        dataType: 'json',
        contentType: 'application/json; charset=UTF-8',
        // ...
        beforeSend: function(xhr){
            xhr.setRequestHeader('Authorization', userToken);
        }
    })
}



回答2:


We use a custom adapter in our application the adapter looks something like this

import DS from "ember-data";
import Ember from "ember";
import App from '../app';

export
default DS.RESTAdapter.extend({
    namespace: 'data',
    host: App.hostUrl,
    ajax: function (url, type, hash) {
        hash = hash || {};
        hash.headers = hash.headers || {};
        hash.headers['Authorization'] = 'Token token=' + App.access_token;
        hash.crossDomain = true;
        return this._super(url, type, hash);
    }
});

Every other model adapter used extends this adapter for ex.

import ApplicationAdaper from './application';

export default ApplicationAdaper.extend({
   ...
});

For reference and further Information Check RESTAdapter Header Customization http://emberjs.com/api/data/classes/DS.RESTAdapter.html



来源:https://stackoverflow.com/questions/34677335/setting-the-access-token-on-every-ajax-request

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!