Restangular POST失败https:// OPTIONS传递

时间:2013-10-01 19:05:48

标签: javascript angularjs ssl https restangular

我能够将大多数现有服务转换为使用Restangular。除POST之外的所有内容都正常运行。

的原始POST服务

app.service('APIService', function($http, $q){
...
this.post = function(api, route, params){
        var d = $q.defer();
        $http({
            url : base_urls[api] + route,
            method : 'POST',
            data : params,
            withCredentials: true,
            useXDomain : true,
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'

            }
        }).success(function(data){
            d.resolve(data);
            try{
               toastr.success(toastMsg[route].win, 'Success');  
            } catch(err){}

        }).error(function(data){
            d.reject(data);
            try{
                toastr.error(toastMsg[route].fail, 'Whoops');
            } catch(err){}

        });
        return d.promise;
    }
});

使用如下:

app.controller('AuthController', function($scope, APIService){
    $scope.login = function(username_or_email, password, redirectUrl){
        APIService.post('root', '/login', {
            'username_or_email' : username_or_email, 
            'password' : password
        }).then(function(r){

        if(r.success){
            window.location = redirectUrl;
        }else
        {
          // handle this 
        }
      });
   };
});

转换为Restangular

app.controller('AuthController', function ($scope, toastrFactory, Restangular) {
    $scope.login = function (username_or_email, password, redirectUrl) {
        var login = Restangular.one('auth'),
            creds = {
                'username_or_email': username_or_email,
                'password': password
            };


        login.post('login', creds).then(function (r) {
            window.location = redirectUrl || '/profile';
        }, function () {
            toastrFactory.error(['Error', 'Login not successful'])
        })
    };
});

上述操作未能通过OPTIONS飞行前的RestangularProvider.setBaseUrl('https://dev.foo.com/'); RestangularProvider.setDefaultHttpFields({ withCredentials: true, useXDomain : true, headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }); 通过,并放弃了。我的原始服务和我正在尝试使用的Restangular调用之间有什么区别?

值得注意的是我确实为Restangular设置了默认配置参数(以镜像原始服务)

GET

我的Restangular OPTIONS在https:// WORK上需要凭据,并成功通过{{1}}阶段,并设法发送cookie数据,这有点奇怪。

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

我不确定您要尝试的实际路线,但Restangular.one('auth')似乎您需要定义资源标识符(例如POST /auth/123?username_or_email=moi)。

如果您尝试触及POST /auth?username_or_email=moi(使用HTTP参数中的cred),请尝试Restangular.all('auth')

如果这不能解决问题,请提供您在浏览器的网络检查器中看到的URI以及您想要访问的URI。