$ resource delete功能无法按预期工作?

时间:2014-12-25 07:10:28

标签: javascript ajax angularjs cookies angular-resource

我在Angular中构建了一个简单的应用程序,使用了我自己使用Laravel创建的简单API。该应用程序已托管here。 API已托管here。现在我可以登录到应用程序,此时API返回一个简单的auth_token,它将作为URL参数发送到发送到服务器的每个后续请求中。

系统中只有一个用户:

Email: admin@admin.com
Password: admin12345

您可以使用这些凭据登录应用程序,此时应用程序将使用$cookieStore服务设置cookie,并将在此cookie中使用此令牌用于每个后续请求。使用该应用程序后,用户可以从应用程序注销,其中DELETE请求发送到服务器,并且在成功方法上,cookie将从浏览器中删除。

不幸的是,我认为代码存在一些问题。 DELETE请求按预期工作,它会删除服务器上的auth_token并返回200 OK。但是没有调用成功方法。我不确定我做错了什么。这可能只是一个语法问题。

app.js

function AppCtrl ($scope, $cookieStore, $location, Auth) {
  $scope.setActive = function (type) {
    $scope.destinationsActive = '';
    $scope.flightsActive = '';
    $scope.reservationsActive = '';

    $scope[type + 'Active'] = 'active';
  };

  $scope.authenticate = function (credentials) {
    Auth.save(credentials, function(data){
      $cookieStore.put('auth_token', data.auth_token);
      $scope.isLoggedIn = true;
      $location.path('destinations');
      $scope.message = null;
    }, function(data){
      $scope.message = "Email/Password combination incorrect!";
    });
  };

  $scope.logout = function () {
    //var auth_token = $cookieStore.get('auth_token');
    Auth.delete({
      'auth_token': $cookieStore.get('auth_token')
    }, function(data){
      $scope.isLoggedIn = false;
      $cookieStore.remove('auth_token');
    });

  };

  if($cookieStore.get('auth_token')){
    $scope.isLoggedIn = true;
  }else{
    $scope.isLoggedIn = false;
  }

}

按下注销按钮时会调用注销功能。我在这里做错了什么?

注意:由于某种原因,该应用程序无法在Chrome上运行(使用Firefox)。如果你能对此有所了解,那将非常有帮助。

如果您希望查看这两个存储库是公开的:

AngulAir申请:http://gitlab.learningtechasia.com:8901/rohan0793/angulair.git

AngulAirAPI:http://gitlab.learningtechasia.com:8901/rohan0793/angulairapi.git

1 个答案:

答案 0 :(得分:2)

这是您的解决方案

$scope.logout = function () {
    //var auth_token = $cookieStore.get('auth_token');
    Auth.delete(
    {'auth_token': $cookieStore.get('auth_token')}, // parameters
    {},//postData, which you don't need for this
    function(data){
      $scope.isLoggedIn = false;
      $cookieStore.remove('auth_token');
    },
    // error callback
    function (httpResponse) {
       // do what you want for error handling here
    }
  );  
  };

注意: - > (以下几点解决了问题)

  1. 仅缺少$ resource.delete API中的第二个选项(postdata)。如果API不需要,我们应该将其作为空白{}。
  2. 并且delete方法应该返回204状态代码以执行成功回调。