如何使用 react-native-fbsdk 提供的 LoginManager 从 facebook 注销



简单来说,如何使用 react-native-fbsdk 提供的 LoginManager 注销?

如果我们查看 react-native-fbsdk 提供的 LoginManager 内部的代码,我们会发现有关注销的这一部分:

  logOut() {
    LoginManager.logOut();
  },

所以没有回电,或者承诺?那我该怎么用呢?如果我调用 LoginManager.logout(),它实际上会执行注销。但是由于不允许我传递任何回调,并且由于它不返回承诺,那么我怎么知道注销何时完成,或者它是否成功?我尝试提供回调,但导致错误。我也试图从中返回一个承诺,但它也返回了一个错误。所以我不知道这应该如何使用?它不可能是同步注销,对吧?

我认为

它不是一个同步函数,但我认为你不需要等待它完成。您可以将其用作同步。我之所以这么想,是因为如果您检查react-native-fbsdk onLogoutFinished prop 上的默认LoginButton不会传递有关注销操作的任何参数(成功、失败等)。这意味着您可以假设它会毫无问题地发生,因为Facebook本身就假设了这一点。默认LoginButton侦听要运行的事件onLogoutFinished函数。如果你真的需要,你可以尝试实现这样的东西。

对我来说,这有效:

import { LoginManager } from 'react-native-fbsdk'
LoginManager.logOut()

如果你与Firebase一起使用,你可以运行这样的内容

import { LoginManager } from 'react-native-fbsdk-next';
import auth from '@react-native-firebase/auth';
const signOut = async () => {
    console.log('executing logout');
    try {
      LoginManager.logOut();
      const signOutResult = await auth().signOut();
      console.log('signOutResult', signOutResult);
      navigation.navigate('Root', { screen: 'Login' });
    } catch (error) {
      console.error;
    }
  };

实际上,在成功注销后,acsessToken 变为空。因此,在调用loginmanager.logout()之后,您可以使用AccessToken.getCurrentAccessToken()检查访问令牌,如果它为空,那么您可以安全地假设注销已成功发生。

LoginManager.logOut();
const token = await AccessToken.getCurrentAccessToken();
if(_.isEmpty(token) {/* your code for doing logout related actions */}

最新更新