Как правильно установить топор ios заголовки по умолчанию - PullRequest
0 голосов
/ 13 января 2020

Я использую reactjs для своего проекта, но у меня есть одна проблема, в файле конфигурации. js, где я устанавливаю свои глобальные конфигурации ios ax, я устанавливаю заголовки по умолчанию для запросов ax ios, но когда я делаю запрос ax ios, он не отправляет эти заголовки в запросах.

config. js

import axios from 'axios';

const instance = axios.create({
    baseURL: 'URL/api'
});

export const setAuthToken = (token) => {
    if (token) {
        // Apply to every request
        instance.defaults.headers.common['Authorization'] = 'Bearer ' + token;
    } else {
        // Delete auth header
        delete instance.defaults.headers.common['Authorization'];
    }
};

export default instance;

Login. js

import axios from '../../../config';
import { setAuthToken } from '../../../config';
axios
            .post('/auth/signin', {
                username: email,
                password: password
            })
            .then((res) => {
                setCurrentUser(res.data);
                setAuthToken(res.data.accessToken);
                setLoading(false);
            })
            .catch((err) => {
                console.log(err);
                setLoading(false);
                setError(true);
            });

Ответы [ 2 ]

1 голос
/ 13 января 2020

Вы можете использовать топор ios перехватчики для этой задачи.

1-) Внутри успешного входа в систему поместите полученный токен в localStorage. Удалите строку setAuthToken.

 .then((res) => {
                setCurrentUser(res.data);
                localStorage.setItem("token", res.data.accessToken);
                setLoading(false);
            })

2-) Добавьте этот перехватчик к вашему экземпляру ios.

const instance = axios.create({
    baseURL: 'URL/api'
});

instance.interceptors.request.use(
  function(config) {
    const token = localStorage.getItem("token"); 
    if (token) {
      config.headers["Authorization"] = 'Bearer ' + token;
    }
    return config;
  },
  function(error) {
    return Promise.reject(error);
  }
);
0 голосов
/ 13 января 2020

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

Фрагмент кода ниже не работает (но не вызывает ошибок); глобальный заголовок используется при использовании экземпляра:

// Index.js
axios.defaults.headers.common['Authorization'] = 'AUTH_TOKEN';

// myAxios.js
const instance = axios.create({
  baseURL: 'https://jsonplaceholder.typicode.com'
});

instance.defaults.headers.common['Authorization'] = 'AUTH_TOKEN_FROM_INSTANCE';

Это работает, заголовок экземпляра переопределяет глобальное значение по умолчанию:

// Index.js
axios.defaults.headers.common['Authorization'] = 'AUTH_TOKEN';

// myAxios.js
const instance = axios.create({
  baseURL: 'https://jsonplaceholder.typicode.com',
  headers: {
    common: {
      Authorization: 'AUTH_TOKEN_FROM_INSTANCE'
    }
  }
});

Мне кажется, что эта структура объекта должна быть создана по умолчанию при использовании # create.

=========================================== ===========================================

Дополнительно, если вы хотите сбросить заголовок не использует delete. Вот тест:

it('should remove default headers when config indicates', function (done) {
  var instance = axios.create();
  instance.defaults.headers.common['Content-Type'] = 'application/json';

  instance.post('/foo/bar/', {
    firstName: 'foo',
    lastName: 'bar'
  }, {
    headers: {
      'Content-Type': null
    }
  });

  getAjaxRequest().then(function (request) {
    testHeaderValue(request.requestHeaders, 'Content-Type', null);
    done();
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...