【发布时间】:2016-01-24 21:15:23
【问题描述】:
我有一个奇怪的问题发生在我身上,这让我很困惑。 我正在使用 AngularJS 开发一个前端网站,该网站连接到使用 OAuth 身份验证协议的服务器。为了实现这一点,我四处浏览并遇到了包含 OAuth 请求的angular-auth2。
我做了一个登录控制器来处理用户登录,它依赖于angular-auth2的OAuth服务:
angular.module('myApp')
.controller('LoginController', function($scope, OAuth) {
$scope.login = function() {
var username = $scope.username;
var password = $scope.password;
return OAuth.getAccessToken({
username: username,
password: password
}).then(function() {
console.log(arguments);
}, function() {
console.log('ERORRRRRRRRRR!!!!!');
console.log(arguments);
});
};
});
我正在从我的视图中调用登录方法,如下所示:
<form>
username: <input type="text" ng-model="username"><br />
password: <input type="password" ng-model="password"><br />
<button ng-click="login()">Login</button>
</form>
当我第一次单击具有正确凭据的登录按钮时,angular-auth2 会向服务器创建 POST 请求并将响应存储在 cookie 中,但每当我尝试在之后发出任何其他请求时,@987654327 @ 请求前面有一个 OPTIONS 请求,该请求失败并显示错误代码 400 和 Bad Request 错误消息,如果我删除 cookie,我不会收到 OPTIONS 请求,一切正常。
令人困惑的部分是我尝试使用 jQuery 发出这些请求,而我能够在没有 OPTIONS 请求的情况下发送 POST 请求。
这是我的 jQuery 代码:
function login(username, password, client_id, apiUrl, successCallback, errorCallback) {
$.ajax(apiUrl, {
data: {
'grant_type': 'password',
'client_id': client_id,
'username': username,
'password': password
},
success: function (data) {
successCallback(data);
},
error: function (data) {
errorCallback(data);
},
method: 'POST',
});
};
现在我被我的这个问题困住了,并且对何时发送OPTIONS 请求以及何时不发送感到困惑。
【问题讨论】:
-
您可能需要查看 CORS。 OPTIONS 请求在大多数 CORS 请求之前。
标签: jquery angularjs oauth cross-browser xmlhttprequest