ошибка «не может сделать активного пользователя вошедшим в систему пользователем» при анонимной аутентификации с помощью ReactNative - Stitch - MongoDB - PullRequest
0 голосов
/ 04 мая 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...