React native set cook ie на fetch / axios - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь установить cook ie на выборку или топор ios, я уже проверил решения, опубликованные на github или stackoverflow, но ни одно из них сейчас не работает. Я использую Saml для аутентификации в моем проекте RN.

Итак, вот истории:

при первом входе в систему, если пользователь нажимает кнопку запуска, он вызывает api для получения информации профиля , если в заголовке нет cook ie, он возвращает URL-адрес перенаправления, а также cook ie (это неверный cook ie) и go на URL-адрес в веб-просмотре после того, как пользователь входит в веб-просмотр, затем исходный URL-адрес (получить api профиля) вызывается в веб-просмотре, после этого я бы взял auth cook ie, используя библиотеку response-native-cookies, а затем установил его в заголовке fetch / ax ios. но это не работает.

export async function getMyProfile() {
  const cookies = await LocalStorage.getAuthCookies();
    await CookieManager.clearAll(true)
    const url = `${Config.API_URL}/profiles/authme`;
    let options = {
      method: 'GET',
      url: url,
      headers: {
        'Content-Type': 'application/json',
      },
      withCredentials: true
    };
    if (cookies) options.headers.Cookie = cookies.join(';')
    return axios(options)
    .then(res => {
      console.info('res', res);
      return res;
    }).catch(async (err) => {
      if (err.response) {
        if (err.response.status === 401) {
          const location = _.get(err, 'response.headers.location', null);
          const cookie = _.get(err, 'response.headers.set-cookie[0]', null);
          await LocalStorage.saveUnAuthCookie(cookie);
          return { location, cookie, isRedirect: true };
        }
      }
    });
}

1 Ответ

0 голосов
/ 21 мая 2020

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

  let cookie = null;

  const axiosObj = axios.create({
      baseURL: '',
      headers: {
        'Content-Type': 'application/json',
      },
      responseType: 'json',
      withCredentials: true, // enable use of cookies outside web browser
    });

    // this will check if cookies are there for every request and send request
    axiosObj.interceptors.request.use(async config => {
      cookie = await AsyncStorage.getItem('cookie');
      if (cookie) {
        config.headers.Cookie = cookie;
      }
      return config;
    });
...