Я использую логин на 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>
);
Я думал, что это должно работать так. Но я не
- Если я не удаляю элементы в первой части кода (код кнопки обычного входа в систему), он просто входит в систему, как если бы я нажал на кнопку facebook (что странно, потому что язакройте приложение и снова откройте его, а затем оно будет действовать так, как если бы я вошел в систему с помощью кнопки facebook?), оно запоминает данные facebook, которые выводятся внутри модальной коробки на странице профиля.
- Если я удаляю элементы facebook в обычном коде кнопки, похоже, что он не устанавливает элемент снова, потому что все данные Facebook выводят NULL
AsyncStorage.setItem("facebookName", userInfo.name);
и т. Д. Я только что проверил это сейчас и выяснил кнопка входа в Facebook работает , если я попытался войти во второй раз (кнопка facebook). Поэтому, если я регулярно захожу на сайт, захожу и возвращаюсь, чтобы войти через Facebook, все переменные setItem в Facebook будут нулевыми. Но если я снова попытаюсь войти через Facebook, это сработает?
Так что я запутался в этом, что мне не хватает? Я пишу код неправильно? Или я упускаю возможность сделать что-то еще, чтобы оба логина были стабильными.
Надеюсь, кто-нибудь может мне помочь и объяснить это мне.
Спасибо за ваше время