将授权 header 附加到 Ajax 请求的正确方法是什么?
What is the correct way to attach an Authorization header to an Ajax request?
我有一个 ajax GET 请求,我在一段 Knockout 代码中触发,我需要确保授权 header 已设置。
我的偏好通常是使用 jQuery shorthand 方法,如下所示:
$.getJSON("/api/business", function (allData) {
var mappedOrgs = $.map(allData, function (item) { return new Business(item) });
self.businesses(mappedOrgs);
});
这本身很好,没有任何身份验证要求,但如果我需要包含不记名令牌,我一直在尝试更多 long-winded 方式:
var token = sessionStorage.getItem(tokenKey);
var headers = {};
if (token) {
headers.Authorization = 'Bearer ' + token;
}
$.ajax({
type: 'GET',
url: '/api/business',
headers: headers
}).done(function (data) {
var mappedOrgs = $.map(data, function (item) { return new Business(item) });
self.businesses(mappedOrgs);
}).fail(function () { console.error('api call failed'); });
即使尝试通过 $.ajaxSend() 方法强制解决问题也不会产生任何结果。
$(document).ajaxSend(function (event, xhr, settings) {
var token = sessionStorage.getItem(tokenKey);
var headers = {};
if (token) {
console.info("Found token. Attaching to headers.");
headers.Authorization = 'Bearer ' + token;
settings.headers = headers;
//console.info(headers);
}
});
那么我忽略了什么?我正在检查 Fiddler 中的每个请求,并且从未附加 Auth header。显然有一种正确的方法可以做到这一点,但我在某处错过了一步。任何帮助表示赞赏。
我使用以下:
function getListData(url) {
var d = new $.Deferred();
cfg.apiLoad();
$.ajax({
url: baseUrl + url,
type: 'GET',
headers: { "x-access-token": secure.getToken(), "x-access-finger": finger.getFinger() },
dataType: 'json'
}).fail(function(a, b, c) {
cfg.failError(c);
d.reject(c);
}).done(function (r) {
cfg.apiDone(r);
d.resolve(r.ListResults);
});
return d.promise();
}
您可以根据需要在其中添加任意数量的额外 headers,请忽略 cfg。东西,但这是在网络文件中,如一次写入,使用 everywere with
getListData('/api/Name/Endpoint').then(function(r){ '// do something});
这样就可以解决任何必须重复等问题,而且效果很好。
我的 API returns 任何类型的结果都返回相同的模型
我有一个 ajax GET 请求,我在一段 Knockout 代码中触发,我需要确保授权 header 已设置。
我的偏好通常是使用 jQuery shorthand 方法,如下所示:
$.getJSON("/api/business", function (allData) {
var mappedOrgs = $.map(allData, function (item) { return new Business(item) });
self.businesses(mappedOrgs);
});
这本身很好,没有任何身份验证要求,但如果我需要包含不记名令牌,我一直在尝试更多 long-winded 方式:
var token = sessionStorage.getItem(tokenKey);
var headers = {};
if (token) {
headers.Authorization = 'Bearer ' + token;
}
$.ajax({
type: 'GET',
url: '/api/business',
headers: headers
}).done(function (data) {
var mappedOrgs = $.map(data, function (item) { return new Business(item) });
self.businesses(mappedOrgs);
}).fail(function () { console.error('api call failed'); });
即使尝试通过 $.ajaxSend() 方法强制解决问题也不会产生任何结果。
$(document).ajaxSend(function (event, xhr, settings) {
var token = sessionStorage.getItem(tokenKey);
var headers = {};
if (token) {
console.info("Found token. Attaching to headers.");
headers.Authorization = 'Bearer ' + token;
settings.headers = headers;
//console.info(headers);
}
});
那么我忽略了什么?我正在检查 Fiddler 中的每个请求,并且从未附加 Auth header。显然有一种正确的方法可以做到这一点,但我在某处错过了一步。任何帮助表示赞赏。
我使用以下:
function getListData(url) {
var d = new $.Deferred();
cfg.apiLoad();
$.ajax({
url: baseUrl + url,
type: 'GET',
headers: { "x-access-token": secure.getToken(), "x-access-finger": finger.getFinger() },
dataType: 'json'
}).fail(function(a, b, c) {
cfg.failError(c);
d.reject(c);
}).done(function (r) {
cfg.apiDone(r);
d.resolve(r.ListResults);
});
return d.promise();
}
您可以根据需要在其中添加任意数量的额外 headers,请忽略 cfg。东西,但这是在网络文件中,如一次写入,使用 everywere with
getListData('/api/Name/Endpoint').then(function(r){ '// do something});
这样就可以解决任何必须重复等问题,而且效果很好。 我的 API returns 任何类型的结果都返回相同的模型