角度异步数据检查问题

时间:2013-08-30 15:40:59

标签: http authentication angularjs

我的服务看起来像

//this mthod under myService
this.checkCookie = this.getAuthorization = function() {
    return $http({
        method: 'GET',
        url: '/api/auth'
    });
}

在我的路线配置中,我正在做

MyAPP.config(function($routeProvider) {
    $routeProvider.
    when('/', {
        controller: check
    }).

    when('/login', {
        templateUrl: '/partials/login.html',
        controller: check


    }).
    when('/products', {
        templateUrl: '/partials/products.html'
    })
});

var check = function($location, myService, $q) {
        if (myService.checkCookie()) {
            $location.path("/products");
        } else {
            $location.path("/login");
        }
    };
带有get请求的

我想检查服务器生成的会话数据是否有效。浏览器会在'/ api / auth'中发送'GET'时发送cookie信息。

问题是当我调用this.checkCookie我没有得到响应syncronoulsy作为角度返回asnyc方式的响应。根据checkCookie响应,我想重定向到'/ products'但我现在不能这样做。

我该怎么做?我需要更改以获取this.checkCookie并检查响应状态是200还是500?

2 个答案:

答案 0 :(得分:0)

您无法使用$http执行同步请求。要处理请求返回的承诺,您可以执行以下操作:

var check = function($location, myService, $q) {
  myService.checkCookie()
   .success(function() {
     $location.path("/products");
   })
   .error(function() {
     $location.path("/login");
   })
};

答案 1 :(得分:0)

您必须就then返回的承诺致电$http

myService.checkCookie().then(function () {
    $location.path("/products");
}, function () {
    $location.path("/login");
});

第一个函数是成功处理程序,第二个函数是错误(拒绝)处理程序。