Заголовки авторизации axios работают только с запросами get - PullRequest
0 голосов
/ 29 июня 2019

У меня есть простая конечная точка API для обмена сообщениями /api/v1/posts/{id}/share, для которой требуется аутентификация с токеном на предъявителя.

Я пытаюсь отправить запрос POST, как показано ниже, и он отвечает 401

axios.post(`/api/v1/posts/${id}/share`,
        {
        "headers": {
                "Authorization":"Bearer "+token,
                "Content-Type": "application/x-www-form-urlencoded",
                "Accept": "application/json"
            },
        });

только когда я изменил его, чтобы принять GET на серверной части и изменил код, чтобы это работало

axios.get(`/api/v1/posts/${id}/share`,
        {
        "headers": {
                "Authorization":"Bearer "+token,
                "Content-Type": "application/x-www-form-urlencoded",
                "Accept": "application/json"
            },
        });

Я проверил свои конечные точки с помощью http-клиента (бессонница), поэтому проблема, похоже, связана с axios. почему это происходит и как я могу это решить?

сервер, который я использую, - apache, а базовый фреймворк - laravel

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Основная причина этой проблемы: axios.post и axios.get имеют разный синтаксис - 2-й параметр представляет "config" в axios.get, но представляет "данные" в axios.post. Вот почему он работает в GET, но не работает в POST.

Согласно axios документу , эти 2 синтаксиса:

axios.get (url [, config])

axios.post (url [, data [, config]])

Таким образом, при отправке HTTP POST-запроса с кодом:

axios.post(`/api/v1/posts/${id}/share`,
        {
        "headers": {
                ...
            },
        });

Запрос отправлен с HTTP body как {"header":{...}} - заголовок запроса не настроен.

Чтобы он работал с axios.post, объект конфигурации headers должен быть передан в качестве 3-го параметра. Такие как:

axios.post(`/api/v1/posts/${id}/share`,
        {}, // or whatever data you want to send.
        {
        "headers": {
                ...
            },
        });
0 голосов
/ 01 июля 2019

, поэтому я решил это с помощью другого синтаксиса

const options = {
        method:"post",
        "headers": {
            "Authorization":token,
            "Content-Type": 'application/x-www-form-urlencoded',
            "Accept": "application/json"
        },
        url:`/api/v1/posts/${id}/share`
    };

    axios(options);

Я, честно говоря, не могу сказать, что изменилось, но здесь вы идете для тех, кто видит это.

...