2015-07-22 314 views
0

我正在處理跨源請求以訪問我的restful API,因此我想在每個請求的http請求標頭中設置字段「Authorization」,但不會設置在標頭中。 ..so在這裏做錯了什麼?如何在Http Request Header中設置值

我app.js

'use strict'; 

var app = angular.module('samepinch', [ 
    'ngResource', 
    'ngCookies', 
    'ui.router', 
    'toaster', 
    'ui.bootstrap', 
    'oc.lazyLoad', 
    'samepinch.controllers', 
    'samepinch.directives', 
    'samepinch.factory', 
    'samepinch.services', 

    // Added in v1.3 
    'FBAngular', 
    'Config', 
    'samepinch.login', 
    'samepinch.item', 
    'samepinch.common' 
]); 

angular.module('samepinch.login',[]); 
angular.module('samepinch.item',[]); 
angular.module('samepinch.common',[]) 

app.run(function($http) 
{ 
     $http.defaults.headers.common.Authorization = ''; 
    // Page Loading Overlay 
    public_vars.$pageLoadingOverlay = jQuery('.page-loading-overlay'); 

    jQuery(window).load(function() 
    { 
     public_vars.$pageLoadingOverlay.addClass('loaded'); 
    }) 
}); 

控制器是

angular.module('samepinch.login').controller('LoginController',['$scope','LoginService','$rootScope','$http',function($scope,LoginService,$rootScope,$http){ 

    $rootScope.isLoginPage  = true; 
    $rootScope.isLightLoginPage = false; 
    $rootScope.isLockscreenPage = false; 
    $rootScope.isMainPage   = false; 

    $scope.register = function(credentials){ 
     $http.defaults.headers.common.Authorization = 'dfdfdf'; 
     LoginService.post(credentials,function(success){ 

     },function(error){ 

     }); 
    } 

}]); 

我的服務是

'use strict'; 


angular.module('samepinch.login').factory('LoginService', ['$resource','$enviornment', function ($resource,$enviornment) { 
    var url = $enviornment.backendurl; 
    return $resource(url+'authenticate',{},{ 
     query: { 
      method:'GET', 
      params:{itemId:''}, 
      isArray:true 
     }, 
     post: { 
      method:'POST', 
      headers: { 
        'Authorization': 'Basic dGVzdDp0ZXN0', 
        'Content-Type': 'application/json' 
      } 
     }, 
     update: { 
      method:'PUT', params: {itemId: '@entryId'} 
     }, 
      remove: { 
       method:'DELETE' 
      } 
    }); 
}]); 

我的Http請求看起來像

Remote Address:127.0.0.1:8080 
Request URL:http://localhost:8080/api/v1/authenticate 
Request Method:OPTIONS 
Status Code:401 Unauthorized 
Request Headersview source 
Accept:*/* 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:accept, authorization, content-type 
Access-Control-Request-Method:POST 
Cache-Control:no-cache 
Connection:keep-alive 
Host:localhost:8080 
Origin:http://localhost:9006 
Pragma:no-cache 
Referer:http://localhost:9006/ 
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36 
Response Headersview source 
Access-Control-Allow-Methods:POST, GET, OPTIONS, DELETE,PUT 
Access-Control-Allow-Origin:* 
Access-Control-Max-Age:3600 
Cache-Control:no-cache, no-store, max-age=0, must-revalidate 
Content-Length:0 
Date:Wed, 22 Jul 2015 07:52:15 GMT 
Expires:0 
Pragma:no-cache 
Server:Apache-Coyote/1.1 
X-Content-Type-Options:nosniff 
X-Frame-Options:DENY 
X-XSS-Protection:1; mode=block 

所以「授權」域不在headers..please設置幫助我我在這裏缺少的是什麼

回答

1

此日誌是OPTIONS請求

Request Method:OPTIONS

首先你需要設置你的服務器返回200 OKOPTIONS通話則POST與調用合適的參數將發送

查找這裏說明http://enable-cors.org/如何在配置CORS(包括期權要求)您架構

+0

感謝您的快速回復,請告訴我請一件事,我沒有足夠的Cors請求的知識,你的意思是我已經設置了200服務器的OPTIONS調用沒有任何認證的請求? –

+0

你可以用'200 ok'來完成它,或者你可以通過OPTIONS請求進行認證,如果用戶通過認證,則返回'200 OK',這樣POST請求就可以完成 – maurycy

+0

好吧,如果我想在標題中設置token選項要求,我可以這樣做嗎? –

相關問題