Может кто-нибудь помочь? Обычный вход с использованием входа в Facebook не работает (обычный вход сохраняет переменные входа в Facebook) - PullRequest
0 голосов
/ 01 октября 2019

Я использую логин на Facebook с Expo, и я новичок. Я заметил проблему. Во-первых, я удаляю элементы с Asyncstorage для обоих логинов. Но если я перейду с обычного входа на Facebook, он не поймает элементы / переменные Facebook. Я заметил, потому что я удалил элементы Facebook, когда вход в систему с помощью обычной кнопки входа в систему. Вот код

* РЕДАКТИРОВАТЬ 1 ОКТЯБРЯ Это вывод из моего журнала консоли внутри profile.js, я думаю, это потому, что он не загружает первую миллисекунду со значениями, а толькопосле? Я помещаю все значения getItem в componentDidMount

START
loginRegularundefined
loginFacebookundefined
renderLoginFacebookundefined
renderLoginFacebookundefined
savedUsername: Name
loginRegularundefined
loginFacebookundefined
renderLoginFacebookundefined
loginRegular: 1
loginRegular1
loginFacebookundefined
renderLoginFacebook1
loginFacebook: 1
loginRegular1
loginFacebook1
renderLoginFacebook1
facebookName: First name last name
loginRegular1
loginFacebook1
renderLoginFacebook1
facebookFirstName: name
renderLoginFacebook1
facebookEmail: email
renderLoginFacebook1
facebookPicture: picture
loginRegular1
loginFacebook1
renderLoginFacebook1

Это обычная кнопка входа в систему

 if (res.success === true) {
          AsyncStorage.setItem("savedEmail", res.email);

          AsyncStorage.setItem("savedUsername", res.username);

          AsyncStorage.setItem("savedId", JSON.stringify(res.id));
          /*
          AsyncStorage.removeItem("facebookfirstName");
          AsyncStorage.removeItem("facebookName");
          AsyncStorage.removeItem("facebookEmail");
          AsyncStorage.removeItem("facebookPicture");*/
          this.props.navigation.navigate("Profile");
        } */

Если я не удаляю элементы facebook, он регистрируетсякак если бы я нажал кнопку входа в систему с помощью кнопки Facebook (закрывая приложение и открывая его, он запоминает элементы Facebook, которые я думаю)?

Это кнопка Facebook

 if (type === "success") {

        const response = await fetch(
          `https://graph.facebook.com/me?access_token=${token}&fields=email,name,first_name,picture.type(large)`
        );
        this.props.navigation.navigate("Profile");
        const userInfo = await response.json();
        AsyncStorage.setItem("facebookName", userInfo.name);
        AsyncStorage.setItem("facebookfirstName", userInfo.first_name);
        AsyncStorage.setItem("facebookEmail", userInfo.email);
        AsyncStorage.setItem("facebookPicture", userInfo.picture.data.url);


        AsyncStorage.removeItem("savedUsername");
        AsyncStorage.removeItem("savedEmail");
        AsyncStorage.removeItem("savedId");

        Alert.alert("Logged in!", `Hi ${userInfo.name}!`);
      } else {
        Alert.alert("Not logged in!");
      }

Здесь выше я удаляю обычные переменные входа в систему. Он переходит на страницу профиля, где я установил модальное окно для всплывающего окна со всеми данными facebook, как вы можете видеть ниже (Если значение facebookName пусто, показывать текст или показывать модально)

{!this.state.facebookName ? (
          <Text>Welcome {this.state.usernameValue}</Text>
        ) : (
          <Modal
            isVisible={this.state.visibleModal === "fancy"}
            backdropColor="#B4B3DB"
            backdropOpacity={0.8}
            animationIn="zoomInDown"
            animationOut="zoomOutUp"
            animationInTiming={400}
            animationOutTiming={400}
            backdropTransitionInTiming={550}
            backdropTransitionOutTiming={550}
            onBackdropPress={() => this.setState({ visibleModal: null })}
          >
            {this.renderModalContent()}
          </Modal>
        )}

renderModalContent = () => (
    <View style={styles.modalContent}>
      <Image
        source={{ uri: this.state.facebookPicture }}
        style={{ width: 170, height: 170, borderRadius: 0, marginBottom: 10 }}
      />
      <Text style={{ fontSize: 20, marginBottom: 10 }}>
        You are logged in {this.state.facebookName}
      </Text>

      <Button
        onPress={() => this.setState({ visibleModal: null })}
        title="Close"
      />
    </View>
  );

Я думал, что это должно работать так. Но я не

  1. Если я не удаляю элементы в первой части кода (код кнопки обычного входа в систему), он просто входит в систему, как если бы я нажал на кнопку facebook (что странно, потому что язакройте приложение и снова откройте его, а затем оно будет действовать так, как если бы я вошел в систему с помощью кнопки facebook?), оно запоминает данные facebook, которые выводятся внутри модальной коробки на странице профиля.
  2. Если я удаляю элементы facebook в обычном коде кнопки, похоже, что он не устанавливает элемент снова, потому что все данные Facebook выводят NULL AsyncStorage.setItem("facebookName", userInfo.name); и т. Д. Я только что проверил это сейчас и выяснил кнопка входа в Facebook работает , если я попытался войти во второй раз (кнопка facebook). Поэтому, если я регулярно захожу на сайт, захожу и возвращаюсь, чтобы войти через Facebook, все переменные setItem в Facebook будут нулевыми. Но если я снова попытаюсь войти через Facebook, это сработает?

Так что я запутался в этом, что мне не хватает? Я пишу код неправильно? Или я упускаю возможность сделать что-то еще, чтобы оба логина были стабильными.

Надеюсь, кто-нибудь может мне помочь и объяснить это мне.

Спасибо за ваше время

1 Ответ

0 голосов
/ 02 октября 2019

Я решил это, я протестировал его сегодня, и это было из-за присутствия предупреждающего сообщения, модальное не работает, когда есть также предупреждающее сообщение.

Вот и все:)

...