onLoginFinished callback не запускается при входе через Facebook - PullRequest
3 голосов
/ 06 октября 2019

Я создаю простое приложение React Native, которое реализует «Войти через Facebook», используя реагировать-нативно-fbsdk Я могу войти в систему и выйти из системы, когда кнопка изменится с Войдите в систему в Выйти при входе в систему с учетными данными, но обратный вызов onLoginFinished никогда не срабатывает, хотя onLogoutFinished работает правильно.

Вот мой код:

import React, { Component } from 'react';
import { View,Alert,Button,Text } from 'react-native';
import { LoginButton, AccessToken } from 'react-native-fbsdk';

export default class Login extends Component {
  constructor(props) {
    super(props);
    this.state = {
      userInfo: null
    }
  }

  onFacebookLoginFinished = (error, result) => {
    if (error) {
      Alert.alert("login has error: " + result.error);
    } else if (result.isCancelled) {
      Alert.alert("login is cancelled.");
    } else {
      AccessToken.getCurrentAccessToken().then(
        (data) => {
          Alert.alert(data.accessToken.toString())
          this.props.navigation.navigate('Home')
        }
      )
    }
  }

  render() {
    return (
      <View>
        <LoginButton
          onLoginFinished={this.onFacebookLoginFinished}
          onLogoutFinished={() => Alert.alert("logout.")}/>
      </View>
    );
  }
};

Ответы [ 4 ]

1 голос
/ 23 октября 2019

Я думаю, вы должны попробовать это.

onLoginFinished={(error, result) => this.onFacebookLoginFinished(error, result)}

Измените функцию на эту.

onFacebookLoginFinished (error, result){
    ...
}
1 голос
/ 17 октября 2019

Измените метод onLoginFinished с:

onLoginFinished={this.onFacebookLoginFinished}

На:

onLoginFinished={(error, result) => this.onFacebookLoginFinished(error, result)}

Надеюсь, это поможет!

0 голосов
/ 24 октября 2019

Вы получаете доступ к экземпляру компонента (this), поэтому вам необходимо привязать к вашей функции onLoginFinished, как правило, в вашем конструкторе, например,

constructor(props) {
  super(props);
  this.state = {
    userInfo: null
  }

  this.onFacebookLoginFinished = this.onFacebookLoginFinished.bind(this);
}

Более подробное объяснение и дополнительные параметры приведены здесь. : https://reactjs.org/docs/faq-functions.html#bind-in-constructor-es2015

0 голосов
/ 17 октября 2019

Не могли бы вы попробовать этот код?

Попробуйте сделать это самостоятельно в функции.

onLoginFinished={(error, data) => {
               if (error) {
      Alert.alert("login has error: " + result.error);
    } else if (result.isCancelled) {
      Alert.alert("login is cancelled.");
    } else {
      AccessToken.getCurrentAccessToken().then(
        (data) => {
          Alert.alert(data.accessToken.toString())
          this.props.navigation.navigate('Home')
        }
      )
    }
          }}
...