0

我想传入用于对REST调用api所需的用户名和密码组合。REST的简单身份验证使用角度服务的请求拦截器获取调用

Controller.js

var app = angular.module('myApp', []); 

//The service to put the interceptor configuration on (not on all $http method calls) 
app.factory('getCallsApi', ['$http', function($http) { 
    return { 
     get: function(callback) { 
      $http.get(/* REST URI */).success(function(data) { 
       callback(data); 
      }); 
     } 
    } 
}]); 

var Interceptor = function($q) { 
    return { 
     request: function(config) { 
      //TODO: Pass in username and password (hardcoded) to get through authentication 

     }, 
     requestError: function(rejection) { 

     }, 
     response: function(config) { 
      //TODO: ADD Cross origin headers 

     }, 
     responseError: function(rejection) { 

     } 
    } 
} 

app.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(Interceptor); 
}]); 

myApp.controller('appController', ['$scope','getCallsApi', function($scope, getCallsApi) { 
    getCallsApi.get(function(data) { 
    console.log(data); 
    }); 
}]); 

我目前收到在控制台的两个错误。首先是未授权访问的401状态,以及有关在请求的资源上找不到交叉源标题的错误。我无法将X origin标头放在请求的资源上,因为我没有权限编辑该API的响应。

+1

如果要查询对服务器不允许跨起源,和你没有控制服务器来添加标题,那么***控制服务器的人需要为你做。没有办法绕过这个安全功能。 – Claies

+0

是的,我知道这是一个很长的截获反应,然后添加标题。但无论如何,如何通过服务调用的请求拦截器来通过401? –

回答

0

对于交叉来源问题,不会说话,但这里是如何向请求标头添加内容。在我的情况下,我传入存储在localstorage中的令牌。我们认为值绑定到一个角度不变,并将它注入到拦截器服务:

.constant('AUTH_TOKEN', localStorage.getItem('myapp.authToken')) 

而且在你的拦截器:

var Interceptor = function ($q) { 
     return { 
      request: function (config) { 

       if (AUTH_TOKEN) { 
        config.headers['Authorization'] = 'Token ' + AUTH_TOKEN; 
       } 
       return config; 
      } 
     } 
    } 
+0

谢谢。但是我对Angular来说相当陌生,我不确定如何使用这个常量(通过推入用户名和密码的组合)来验证我对api的请求。我试图使这个常量 - {'username':xxxx,'password':xxxxx},但它不起作用,我仍然得到了一个401. –

+0

常数只是一个例子。你可能不应该在头文件中传递用户名和密码,而是作为登录请求的主体。你试图打什么?它是你的吗?你知道谁是谁?有文件吗?我从来没有听说过需要用户名和密码作为请求标题的一部分的api。你应该对它的工作方式做更多的研究。 – jakeed1

+0

我知道,它不是一个好主意传递在头中的用户名和密码,但我正在寻找一种方式来通过身份验证,而不会弹出窗体的用户通过提供一对有效的代码,以便它被使用每次打电话都要进行身份验证。它是一个私人API,我不是所有者,虽然可能有文档。每当我尝试获取一些数据时,它会弹出一个警告对话框,提供用户名和密码(确实有一个有效的对话框)。 –

相关问题