Я пытаюсь аутентифицироваться с помощью куки. Мое текущее решение реагирует на андроид, но не на 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. Когда я проверяю страницу, она все еще находится на странице входа, она не аутентифицирует меня, поэтому я думаю, что с отправкой формы что-то не так. Любая помощь приветствуется.