我正在使用新版本的ember-simple-auth,它不再自动将访问令牌添加到发送到服务器的ajax请求中。
我正在使用oauth2身份验证,由于文档错误,我无法弄清楚为每个ajax请求设置标头令牌的正确方法和位置。
此代码应该在自定义授权程序的授权功能下还是在其他地方?
this.get('session').authorize('authorizer:some-authorizer', (headerName, headerValue) => {
xhr.setRequestHeader(headerName, headerValue);
});
有关正确设置此信息的任何信息都将受到高度赞赏!
答案 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