【发布时间】:2015-03-11 16:52:17
【问题描述】:
我正在做一个使用 RESTful API 的 Angular 应用程序。我正在以这种方式处理用户的身份验证:
// in services.js
app.factory('authService', ['$http', '$q', 'localStorageService',
function ($http, $q, localStorageService) {
var login = function (loginData) {
var data = "grant_type=something&username=" + loginData.userName + "&password=" + loginData.password;
var deferred = $q.defer();
$http.post(serviceBase + 'token', data).
success(function (response) {
localStorageService.set('authorizationData', { token: response.access_token });
localStorageService.set('personaData', { username: response.username });
deferred.resolve(response);
}).
error(function(err, status) {
deferred.reject(err);
});
return deferred.promise;
};
还有控制器
// controller.js
app.controller('LoginCtrl', ['$scope', '$state', 'authService',
function ($scope, $state, authService) {
$scope.loginData = {
userName: '',
password: ''
};
$scope.alert = {type: '',msg: ''};
$scope.login = function () {
authService.login($scope.loginData).
then(function (response) {
$state.go('index'); // when the service verify that the auth data is correct, the controller redirects to the principal state
}, function (err) {
$scope.alert = {
type: 'danger',
msg: 'non'
};
});
};
}
]);
问题是当用户发送正确的身份验证信息(即用户名和密码)时,当响应为 200 OK 时,服务没有经过.success 回调。是的,只有当响应不是 200 OK 时才会出现这种行为。
资源的确切响应是:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 851
Content-Type: application/json;charset=UTF-8
Expires: -1
Server: Microsoft-IIS/8.5
X-Powered-By: ASP.NET
Date: Wed, 11 Mar 2015 16:20:12 GMT
{"access_token":"...","token_type":"...","expires_in":"...","username":"...","role":"...","display_name":"..."}
这里发生了什么?我该如何解决这个问题?谢谢。
【问题讨论】:
-
如果你没有成功,你至少会出错吗?
-
@KevinB 是的,当 auth 数据错误时,响应为 400 Bad Request,服务按预期运行。
-
对,但是当它是正确的,而你没有得到成功时,你至少会出错吗?
-
在这种情况下,角度报告什么状态代码?我知道你已经看过网络选项卡,我想看看 Angular 看到了什么。可能一直以来您都遇到了 CORS 错误,只是没有看到它们,并假设您收到错误凭据的“错误”是由于凭据错误而不是 CORS。
-
@KevinB 我已经检查过 CORS,不是吗。对于错误的身份验证信息,角度报告确切的状态代码。对于正确的身份验证信息,Angular 不会报告任何内容。
标签: javascript angularjs