Я пытаюсь создать постоянную систему входа в систему с React Native и expo, но сталкиваюсь с несколькими проблемами. Я читал в Интернете, что AsyncStorage
это способ сделать это. Я написал три функции для работы со входом в систему, все они показаны ниже.
// use asyncstorage to log in the user
logInUser = async (uid) => await AsyncStorage.setItem('loggedin', uid)
// set loggedin to null in asyncstorage
logOutUser = async() => await AsyncStorage.setItem('loggedin', null)
// returns userid if user is logged in
getUserState = async() => await AsyncStorage.getItem('loggedin')
На своем экране входа в систему я использую следующее событие onPress
для входа в систему пользователя.
onPress={() => {
db.logInUser(this.user[1]).then(() => {
//this.removekey(this.user[1]) // delete the user's one-time-login key
this.props.navigation.navigate('Home') // navigate to home
})
}}
Также на экране входа в систему я использую следующую функцию componentDidMount
, чтобы отправить пользователя на домашний экран, если он уже вошел в систему.
async componentDidMount() {
db.getUserState().then(loggedin => {
if (loggedin != null) { // log the user in if they have a uid in asyncstorage
this.props.navigation.navigate('Home')
}
})
}
Приложение не будет иметь функцию "выхода из системы", и пользователи должны оставаться в системе до покупки нового телефона или переустановки приложения. К сожалению, этот код не работает, и фактически автоматически регистрирует пользователя. Я думал, что он может относиться к пользователю с id=0
, но удаление этого пользователя из базы данных не имело никакого эффекта. Код фактического приложения здесь .