Я пытаюсь реализовать анонимную аутентификацию с использованием MongoDB (используя модуль 'mongodb-stitch-реагировать-native-sdk') для приложения React Native. Сначала анонимная аутентификация работала нормально, но через некоторое время я получаю эту ошибку "Failed to log in anonymously: n: (UserNotLoggedIn): cannot make the active user a logged out user; please use loginWithCredential() to switch to this user"
.
Посмотрел настройки приложения Stitch на https://stitch.mongodb.com,, попытался удалить всех пользователей. Для меня ошибка звучит так: вместо того, чтобы пытаться создать нового анонимного пользователя (что я считаю анонимным входом в систему), он вместо этого пытается подключиться к существующим пользователям, которые вышли из системы. Точно такой же код работает для моего партнера по проекту, поэтому я предполагаю, что он как-то связан с IP / кэшированием, но я хотел бы понять, почему это происходит. Или это может быть что-то совсем другое - это наше первое приложение React Native и мы впервые используем MongoDB, так что мы совсем не опытны.
Он использует версию IOS приложения Expo, а я - версию Android, если это имеет какое-либо отношение. Мы оба используем "туннельное" соединение (которое является единственным, которое когда-либо работало для нас обоих).
Соответствующий код:
import React from 'react'
import { Button, StyleSheet, Text, View } from 'react-native';
import { Stitch, AnonymousCredential } from 'mongodb-stitch-react-native-sdk';
export default class App extends React.Component {
constructor(props) {
super(props);
this.state={
currentUserId: undefined,
client: undefined
};
this._loadClient = this._loadClient.bind(this);
this._onPressLogin = this._onPressLogin.bind(this);
this._onPressLogout = this._onPressLogout.bind(this);
this._onPressRegister = this._onPressRegister.bind(this);
}
componentDidMount() {
this._loadClient();
}
render() {
let loginStatus = "Currently logged out."
if(this.state.currentUserId) {
loginStatus = `Currently logged in as ${this.state.currentUserId}!`
}
loginButton = <Button
onPress={this._onPressLogin}
title="Login"/>
logoutButton = <Button
onPress={this._onPressLogout}
title="Logout"/>
return (
<View style={styles.container}>
<Text> {loginStatus} </Text>
{this.state.currentUserId !== undefined ? logoutButton : loginButton}
{registerButton}
</View>
);
}
_loadClient() {
Stitch.initializeDefaultAppClient('hobbyproject-shcheduler-blijw').then(client => {
this.setState({ client });
if(client.auth.isLoggedIn) {
this.setState({ currentUserId: client.auth.user.id })
}
});
}
_onPressLogin() {
this.state.client.auth.loginWithCredential(new AnonymousCredential()).then(user => {
console.log(`Successfully logged in as user ${user.id}`);
this.setState({ currentUserId: user.id })
}).catch(err => {
console.log(`Failed to log in anonymously: ${err}`);
this.setState({ currentUserId: undefined })
});
}
_onPressLogout() {
this.state.client.auth.logout().then(user => {
console.log(`Successfully logged out`);
this.setState({ currentUserId: undefined })
}).catch(err => {
console.log(`Failed to log out: ${err}`);
this.setState({ currentUserId: undefined })
});
}
}
Это в значительной степени код из учебника здесь: https://docs.mongodb.com/stitch/authentication/anonymous/
Помощь будет принята с благодарностью, мы оба посмотрели на ошибку, но не смогли ее выяснить. Любые ресурсы, которые могут быть труднее найти в поиске Google, но полезны, также приветствуются.