在每个ajax请求上设置访问令牌

时间:2016-01-08 12:39:04

标签: ember.js ember-simple-auth

我正在使用新版本的ember-simple-auth,它不再自动将访问令牌添加到发送到服务器的ajax请求中。

我正在使用oauth2身份验证,由于文档错误,我无法弄清楚为每个ajax请求设置标头令牌的正确方法和位置。

此代码应该在自定义授权程序的授权功能下还是在其他地方?

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

有关正确设置此信息的任何信息都将受到高度赞赏!

2 个答案:

答案 0 :(得分:1)

你可以这样做:

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

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

如果您不想在每个请求中执行此操作,您可以在某处创建自己的customAjaxCall并使用该地址:

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);
        }
    })
}

答案 1 :(得分:1)

我们在应用程序中使用自定义适配器,适配器看起来像这样

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);
    }
});

使用的每个其他模型适配器都扩展了此适配器。

import ApplicationAdaper from './application';

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

供参考和进一步信息检查RESTAdapter标头自定义 http://emberjs.com/api/data/classes/DS.RESTAdapter.html