Отправить форму с помощью метода POST в реагировать родной сбои - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь аутентифицироваться с помощью куки. Мое текущее решение реагирует на андроид, но не на ios.

Проблема: У меня есть веб-представление, которое отправляет форму в качестве метода POST. После отправки формы в ответе устанавливаются файлы cookie, чтобы пользовательский браузер знал подробности сеанса и т. Д. После того, как куки установлены, мы проверяем куки, используя CookieManager в реагировать на натив, и затем отображаем конкретный веб-просмотр с установленными куки. Однако мы не извлекаем и не внедряем файлы cookie, а просто отображаем страницу с уже установленными файлами cookie.

Код

import RCTNetworking from 'RCTNetworking';
import CookieManager from 'react-native-cookies';

async function getLoginURL() {
  return fetch(`https://www.example.com/login`, {
    credentials: 'same-origin',
  });
}

export function clearCookies() {
  RCTNetworking.clearCookies(() => {});
}

export async function isLoggedIn() {
  const cookies = await CookieManager.get('https://www.example.com');
  return cookies && cookies.SESSION_STATE;
}

export async function login(username, password) {
  
  try {
    clearCookies()
    const loginURL = await getLoginURL();
    const formData = new URLSearchParams();
    formData.append('username', usernamr);
    formData.append('password', password);
    formData.append('method', 'ExtraParameterForBacked');

    const resAuth = await fetch(loginURL, {
      method: 'POST',
      body: formData.toString(),
      credentials: 'same-origin',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
      },
    });
    if (!resAuth.ok) {
      return { ok: false, error: 'Could not fetch the authentication form' };
    }
    
    const cookies = await CookieManager.get('https://www.example.com');
    console.log(cookies) // Here I expect that when I hit the domain the cookies are set.
    // Even if I try to hit the login page again it does not have the set cookies
    // This method works in android but in ios, it does not seem to work at all
    
    // Do some other checking with resAuth variable

    return { ok: true };
  } catch (e) {
    return { ok: false, error: e.message };
  }
}
Что я сделал до сих пор: Я изменил свой запрос на использование credentials: 'include' в обоих запросах, но он все еще не работает. Дело в том, что код работает на Android, но не IOS. Также, пожалуйста, ОБРАТИТЕ ВНИМАНИЕ, что при отправке формы также используется перенаправление. Не уверен, что мне не хватает со стороны IOS. Когда я проверяю страницу, она все еще находится на странице входа, она не аутентифицирует меня, поэтому я думаю, что с отправкой формы что-то не так. Любая помощь приветствуется.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...