Проблемы с постоянным React Native Login - PullRequest
0 голосов
/ 29 апреля 2020

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

...