Авторизация не проходит в запросе AngularJs / PHP

Я реализую аутентификацию JWT, и у меня проблема с авторизацией, установленной в заголовке.

Похоже, что в запросе не установлен заголовок «Авторизация».

Я получил 2 запроса, отправленные клиентом, первый, заголовок авторизации прошел в запросе:

// GET PROJECTS NAME
projects.getName = () => {  // === projects.getName = function() { ... }
return $http.get(Global.url_api+'action=GETINFO&table=Projects');
}

Запрос в браузере:

Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOi....
Host: *******-tpinst.fr
Origin: http://localhost:2000
Proxy-Connection: keep-alive
Referer: http://localhost:2000/
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36

Но мой второй запрос, реализованный так же, как и первый, не прошел этот заголовок авторизации:

users.get = function(project){
return $http.get(Global.url_api+'action=GET&table='+project+'_users');
}

В браузере:

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
Access-Control-Request-Headers: authorization
Access-Control-Request-Method: GET
Host: bouygues-tpinst.fr
Origin: http://localhost:2000
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36

Авторизация устанавливается в основной программе:

app.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.headers.common['Authorization'] = 'Bearer 
'+localStorage.getItem('tokenAPI');
}])

Я установил Разрешить происхождение на моей стороне сервера следующими строками:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, 
OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, Authorization');

Я новичок в этих понятиях безопасности, пожалуйста, помогите мне

РЕДАКТИРОВАТЬ :

Я только что нашел подсказку, в моем api.php я получил эту строку для отправки клиенту ошибки 401:

$Authorization = $_SERVER['HTTP_AUTHORIZATION'];

//Looking for authorization headers
if ($Authorization){ ... }
else {  
    header('HTTP/1.0 401 Unauthorized'); //Give error code 401
    echo 'Token not found in the header';
}

Когда я удаляю

header('HTTP/1.0 401 Unauthorized');

Проход авторизации в заголовке

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
80
1

Ответы 1

Удалите $httpProvider.defaults.headers.common

вместо этого реализуйте перехватчик http

Попробуй это

app.factory("authInterceptor", authInterceptor);

authInterceptor.$inject = ["$q"];

function authInterceptor($q) {
    return {

        // Add an interceptor for requests.
        'request': function (config) {
            // Default to an empty object if no headers are set.
            config.headers = config.headers || {}; 
            // Set the token
            var token = localStorage.getItem('tokenAPI');
            config.headers.Authorization = "Bearer " + token;

            return config;
        },

        // Add an interceptor for any responses that error.
        'responseError': function (response) {

            // Check if the error is auth-related.
            if (response.status === 401 || response.status === 403) {

            }

            return $q.reject(response);
        }

    };

}


app.config(["$httpProvider",
    function ($httpProvider) {
        //Registers the interceptor
        $httpProvider.interceptors.push("authInterceptor");
    }]);

И я думаю, что перестановка ваших скриптов вызывает проблему, поместите свой скрипт контроллера внизу

что-то вроде этого

И в вашем main.js удалите var app = angular.module('App', ['ngMaterial', 'ngMessages']), потому что мы поместили его в index.html

Во-первых, спасибо, что нашли время ответить @John. Я пробовал ваше решение, но не совсем уверен, как назвать эту фабрику. Я создал новый файл с именем «authInterceptor» и вставил этот код. И в моем основном контроллере я добавил "authInterceptor" в конструктор и теперь получил ужасную ошибку в моей консоли: Error: [$injector:unpr]. Вот как я назвал эту фабрику: app.controller('Ctrl', ['$rootScope', '$scope','$http','$timeout','$mdDialog','authInterceptor',..‌​. function($rootScope, $scope, $http){...}

TotoNaBendo 29.05.2018 11:13

нет, не добавляйте его к контроллеру, просто оставьте его там, единственное использование authInterceptor - это перехват входящего запроса, то есть весь ваш запрос будет сначала привязан к нему.

John Velasquez 29.05.2018 11:18

Та же проблема, первый запрос авторизации отправки, а второй нет.

TotoNaBendo 29.05.2018 11:22

Большое спасибо, что уделили мне время. Вот плункер: plnk, первый запрос на projects.js l.6, второй на user.js l.5, я просто копирую / вставляю то, что должно быть интересно, если вам нужно больше, спросите меня.

TotoNaBendo 29.05.2018 13:11

Ваш планшет пуст, проверьте еще раз

John Velasquez 29.05.2018 14:18
Отредактированный планк Все должно быть хорошо. Извините, я не знаю, как поделиться URL-адресом.
TotoNaBendo 29.05.2018 15:25

В вашем плункере много ошибок, в чем сейчас ошибка вашей консоли?

John Velasquez 29.05.2018 17:31

Другие вопросы по теме