React - отправка правильных данных на сервер и получение ошибки

Я пытаюсь создать логин в react-native. Для этого я отправляю информацию о пользователе в веб-сервис. если информация верна, сервер вернет json

Проблема в том, что я отправляю правильную информацию о пользователе на сервер и получаю сообщение об ошибке, как будто я ввел неверную информацию

Но когда я тестирую Postman с той же информацией, я не получаю никаких сообщений об ошибках.

конструктор

constructor() {
        super()
        this.state = {
            showPass: true,
            press: false,
            username: "",
            password: ""
        }
    }

функция, которая извлекает данные

checkLogin = () => {
        const { username, password } = this.state;
        var url = 'https://xxxxxxx/xxxx/xxxx/xxxx/auth/login'

        fetch(url, {
            method: 'POST',
            headers: {
                Accept: 'application/json',
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({
                username, password
            })
        })
        .then((response) => response.json())
        .then((responseJson) => {
            if (!responseJson.errors) {
                this.props.navigation.navigate('foto');
                console.info(username + " 1");
                console.info(password + " 1");
            } else {
                Alert.alert('Error', responseJson.message, [{
                    text: 'Fechar'
                }]);
                console.info(username + " 2");
                console.info(password + " 2");

            }
        })
        .catch((error) => {
            console.error(error);
        })



Входы

<TextInput onChangeText = {text => this.setState({ username: text })} />
<TextInput onChangeText = {text => this.setState({ password: text })} />

<TouchableOpacity style = {Style.btnLogin} onPress = {() => this.checkLogin()} >
        <Text style = {Style.textoLogin}>Entrar</Text>
</TouchableOpacity>

JSON, который я получаю от Postman с той же информацией, что и на входе

{
    "errors": false,
    "type": "-",
    "line": "-",
    "message": "Login successfully!",
    "user": {
        "user_id": 2,
        "name": "xxxxxxx",
        "username": "xxxxxxxx",
        "email": "[email protected]"
    },
    "_token": "xxxxxxxxxxx"
}

в вашем коде вы устанавливаете value = {this.state.<variable>} на TextInput?

lemieuxster 10.04.2019 23:44

да я устанавливаю

iReallyNeedYourHelp 10.04.2019 23:51

Я подозреваю, что ваше тело запроса не отформатировано так, как вы думаете. Пробовали ли вы проверить вкладку сети инструментов разработчика браузера и проверить запрос и тело, чтобы убедиться, что он отформатирован так, как ожидает ваш API? Обновлено: теперь я вижу, что это react-native. stackoverflow.com/questions/33997443/… может помочь настроить отладчик Chrome для просмотра сетевых запросов.

LMulvey 10.04.2019 23:57

@LMulvey, где мне это использовать?

iReallyNeedYourHelp 11.04.2019 00:09

Может немного закомплексовать. Прежде чем пойти по этому пути, у вас есть доступ к коду этого сервера? Можете ли вы выполнить отладку и вывести из системы то, что вы на самом деле получаете от этих запросов?

LMulvey 11.04.2019 00:16

Я пробовал, но приложение не запускается, если у меня включен CORS. И нет, у меня нет доступа к коду сервера

iReallyNeedYourHelp 11.04.2019 00:22

Вы проверили имя пользователя, пароль тот же, что и у вас, в текстовых файлах? тело: JSON.stringify({имя пользователя, пароль})

madu_dev 11.04.2019 05:22

Не могли бы вы попробовать это без строк. Я думаю, что fetch также поддерживает объекты в качестве своего тела.

Rik 11.04.2019 08:43

@ Рик, ты говоришь мне просто попробовать body: JSON({ username, password }) ?

iReallyNeedYourHelp 11.04.2019 18:27

Нет, только без json

Rik 11.04.2019 20:36

@Rik не могу получить unsupported bodyinit type ошибку

iReallyNeedYourHelp 12.04.2019 00:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
11
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, я решил свою проблему, мне пришлось изменить свой body на FormData()

Вот код:


checkLogin = () => {

        var url = 'https://xxxxx/xxxx/xxx/xxx/auth/login';
        const { username, password } = this.state;
        /*const username1 = this.state.username;
        const password1 = this.state.password;
        var data = {
            "username" : this.state.username,
            "password" : this.state.password 
        }*/
        var formData=new FormData();
        formData.append('username', username);
        formData.append('password',password);


        fetch(url, {
            method: 'POST',
           // body: JSON.stringify(data)
           body: formData
        })
        .then((response) => response.json())
        .then((responseJson) => {
            if (!responseJson.errors) {
                this.storeData(JSON.stringify(responseJson.user), responseJson._token)
                this.props.navigation.navigate('foto');

            } else {
                Alert.alert('Error', responseJson.message, [{
                    text: 'Fechar'
                }]);


            }


        })
        .catch((error) => {
            console.error(error);
        })



Другие вопросы по теме