Заголовок не установлен – SlimFramework

Я использую SlimFramework

Когда я запускаю свой скрипт locali с помощью xampp, он отлично работает. Но я загрузил сценарий на сервер, и теперь он искривляет ошибку, что заголовок не был установлен.

XHR не разрешает загрузку GET-запроса. или изменить определение метода в настройках.

Здесь сценарий в угловом

$rootScope.globals = $cookies.getObject('globals') || {}; if ($rootScope.globals.currentUser) { $http.defaults.headers.common['Authorization'] = 'Basic ' + $rootScope.globals.currentUser.token; } $rootScope.$on('$locationChangeStart', function (event, next, current) { var restrictedPage = $.inArray($location.path(), ['/login', '/register', '/password']) === -1; var loggedIn = $rootScope.globals.currentUser; if (restrictedPage) { if (!loggedIn) { $location.path('/login'); } else { UserService.checkToken($rootScope.globals.currentUser.token) .then(function (response) { if (!response.success) { $location.path('/login'); } }); } } }); 

 function checkToken(token) { return $http.get('api/v1/token').then(handleCallback, handleCallback); } function handleCallback(res) { console.log(res); return res.data; } 

И вот сценарий с SlimFramework

 $config['displayErrorDetails'] = true; $config['addContentLengthHeader'] = false; $config['determineRouteBeforeAppMiddleware'] = true; $app = new \Slim\App(["settings" => $config]); $container = $app->getContainer(); // This is the middleware // It will add the Access-Control-Allow-Methods header to every request $app->add(function ($req, $res, $next) { $response = $next($req, $res); return $response ->withHeader('Access-Control-Allow-Origin', '*') ->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization') ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); }); $app->get('/token', function ($request, $response){ $token = $request->getHeaderLine('Authorization'); if($token){ $db = new DbOperation(); if($db->checkAuthentication($token)){ $return = $response->withJson(["success"=> true], 200); } else { $return = $response->withJson([ "success"=> false, "message"=>'Invalid token' ], 403); } } else { $return = $response->withJson([ "success"=> false, "message"=>'Header not set.' ], 403); } return $return; }); 

В чем моя проблема? Все знают?

Спасибо

UPDATE: Получить запрос введите описание изображения здесь

Ответ от тестирования API

 HTTP/1.1 403 Forbidden Server: nginx Date: Mon, 27 Mar 2017 11:57:27 GMT Content-Type: application/json;charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.6.30 Access-Control-Allow-Origin: * Access-Control-Allow-Headers: X-Requested-With, Content-Type, Accept, Origin, Authorization Access-Control-Allow-Methods: GET X-Powered-By: PleskLin 

если вы хотите открыть вызов api to cors для всех возможных источников (только для теста), попробуйте это:

 $app->add(function ($req, $res, $next) { $response = $next($req, $res); return $response ->withHeader('Access-Control-Allow-Origin', '*') ->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization') ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); }); 

Или есть это промежуточное ПО, которое делает то же самое: https://github.com/palanik/CorsSlim

Если вы не уверены, что такое имя заголовка, сгенерированное NG, вы можете отлаживать заголовок, отправленный в SLIM. В SLIM это можно сделать следующим образом:

 $headers = $request->getHeaders(); foreach ($headers as $name => $values) { echo $name . ": " . implode(", ", $values); } 

Я использую jquery, я устанавливаю токен в заголовке глобально, например:

  $.ajaxPrefilter(function( options, oriOptions, jqXHR ) { jqXHR.setRequestHeader("Authorization", sessionStorage.token); }); 

Это отправит токен с именем заголовка:

 HTTP_AUTHORIZATION 

Чтобы получить конкретную переменную заголовка:

  $token_array = $request->getHeader('HTTP_AUTHORIZATION'); if (count($token_array) == 0) { $data = Array( "jwt_status" => "token_not_exist" ); return $response->withJson($data, 401) ->withHeader('Content-type', 'application/json'); } $token = $token_array[0];