我有一个用 asp.net 身份保护的MVC项目:
这是我的登录功能:
self.login = function () {
event.preventDefault();
if (!$('#formLogin').valid()) {
return false;
}
var loginData = {
grant_type: 'password',
username: self.userName(),
password: self.password()
};
$.ajax({
type: 'POST',
url: '/API/Token',
data: loginData
}).done(function (data) {
// Cache the access token in session storage.
sessionStorage.setItem(tokenKey, data.access_token);
self.authenticate();
//change status of Login button to Logout
self.redirect('Users');
}).fail(showError);
}
self.authenticate = function () {
self.token = sessionStorage.getItem(tokenKey);
var headers = {};
console.log(self.token);
if (self.token) {
headers.Authorization = 'Bearer ' + self.token;
}
$.ajaxSetup({
headers: headers
});
}
这工作正常,我成功获得了token
并且标题设置正确。
问题是当我尝试发送请求时 - 例如:
self.getUsers = function () {
$.get("/API/Users/GetUsers/");
}
我从服务器收到 401 错误:
"消息":"此请求的授权被拒绝。
我做错了什么?
根据jQuery.ajax
的官方文档,使用它来设置每个请求的自定义标头:
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', '...');
}
});