Не удается выполнить проверку подлинности вызовов RESTful API на iOS после обновления React Native 0.61 - PullRequest
1 голос
/ 14 января 2020

Я работаю над приложением React Native, которое должно выполнять вызовы API для RESTful API, построенного на основе Django REST. Для аутентификации у нашего API есть конечная точка входа в систему, которая отправляет в заголовок идентификатор sessionid cook ie, который мы затем отправляем обратно в будущих заголовках запросов для получения информации, определяемой пользователем c.

On Android это работает, как и ожидалось, однако на iOS при отправке точно такого же запроса после успешного входа на сервер выдает ошибку из-за неаутентификации пользователя.

Единственное заметное отличие в этих тестах заключается в том, что на iOS сервер возвращает пустой идентификатор сеанса после второго вызова (отправленного с действительным идентификатором сеанса):

"headers": Object {
    ...
    "Cookie": "sessionid=\"\"; ..."
}

Недавно мы обновились до Expo SDK 36, который включает обновление React Native 0.61. До этого обновления версии Android и iOS работали, как и ожидалось, однако я не могу быть уверен, что это была прямая причина, так как после обновления произошел двухнедельный перерыв на Рождество непосредственно перед обнаружением проблемы.

Этот фрагмент показывает, как мы получаем повара ie при выполнении запроса (в настоящее время избегая использования дополнительных библиотек для упрощения процесса):

response = await fetch(requestConfig.url, requestConfig)
      .then(result => {
        let cookies = result.headers.get('set-cookie');
        if (cookies != null) {
          let sessionId = cookies.split(', ').find(element => element.match(/sessionid/))!.substring(10, 42);
          sessionId && (this.sessionId = sessionId);
        }
        return result;
      });

Я попытался добавить credentials: 'include', к запросу, с безуспешно.

При выполнении аутентифицированного запроса сам запрос на обеих платформах выглядит следующим образом:

Object {
  "body": "<JSON_Request>",
  "headers": Object {
    "Accept": "application/json",
    "Content-type": "application/json",
    "Cookie": "sessionid=<sessionID>",
  },
  "method": "POST",
  "url": "<API_URL>",
}

Я был бы очень признателен за помощь, если бы кто-нибудь столкнулся с подобной проблемой с React Родной 0.61, или могу заметить что я делаю не так!

...