使用 react-native-fbsdk 注销的正确方法

Posted

技术标签:

【中文标题】使用 react-native-fbsdk 注销的正确方法【英文标题】:Proper way to logout with react-native-fbsdk 【发布时间】:2018-07-29 21:22:04 【问题描述】:

我正在使用 react-native-fbsdk 在我的 react-native 应用程序上通过 facebook 登录。 我打电话给LoginManager.logOut() 注销:它实际上并没有正确注销,因为下次我尝试登录时,它不会再次要求我输入登录名/密码,所以我只能登录一个帐户。我找不到登录另一个 Facebook 帐户的方法。

这家伙 (react-native-fbsdk: How properly log out from facebook?) 遇到了同样的问题,似乎没有找到解决方案。

ios 上的一个技巧是去 safari,然后从移动 facebook 网站注销。不过这在android上不起作用:(

编辑:

这是我的 Facebook 登录代码:

function login() 
  return LoginManager.logInWithReadPermissions(FACEBOOK_PERMISSIONS)
    .then(result => 
      if (result.isCancelled) 
        throw new Error("Login canceled");
      
      return AccessToken.getCurrentAccessToken();
    )
    .then(( accessToken ) => accessToken);

注销/登录视频:https://d3vv6lp55qjaqc.cloudfront.net/items/132L2U1p383E1y0l2l2v/Screen%20Recording%202018-10-31%20at%2002.52%20PM.mov

【问题讨论】:

您找到解决方案了吗? @zarnifoulette 不是一个解决方案,而是一个 hack:如果您改用网络行为,它会要求再次登录。 const webLoginBehavior = Platform.OS === "ios" ? "web" : "WEB_ONLY"; LoginManager.setLoginBehavior(webLoginBehavior); 我找到了一个解决方案,实际上如果你想注销,你需要做一个 GraphRequest。我会为你写一个合适的解决方案。 我忘了回复你,但是我也遇到了同样的问题。目前这对我来说不是问题。但是,如果您找到解决方案,我会很高兴听到它:) 【参考方案1】:

所以我找到了这个解决方案,这不是破解,而是在 facebook 上执行注销的正确方法。您需要创建一个 GraphRequest 来请求删除权限。 下面是代码,希望对你有所帮助。我在 Android 和 IOS 上对其进行了测试,效果非常好。

    FBLogout = (accessToken) => 
        let logout =
            new GraphRequest(
                "me/permissions/",
                
                    accessToken: accessToken,
                    httpMethod: 'DELETE'
                ,
                (error, result) => 
                    if (error) 
                        console.log('Error fetching data: ' + error.toString());
                     else 
                        LoginManager.logOut();
                    
                );
        new GraphRequestManager().addRequest(logout).start();
    ;

【讨论】:

它确实会注销,但是当我再次尝试登录时,它不会要求输入电子邮件或密码,我只能使用同一用户重新登录。 :( 你能给我看一些截图和你的登录代码吗? 大家好。 @zarnifoulette 对此有什么解决方案吗?我尝试了上面的图形请求提案,但正如 httpete 所说,它在第二次尝试时不要求任何形式的确认。 大家好,我已经发布了一个github issue,你可以在这里关注github.com/facebook/react-native-fbsdk/issues/507 @zagoa 感谢您打开这个问题。我以当之无愧的侵略性跟进它。【参考方案2】:

问题不在于 react-native-fbsdk,而在于 Facebook 或用户登录以连接到您的应用程序的浏览器,原因是每次您的应用程序通过浏览器或 Facebook 应用程序访问 Facebook 登录用户帐户已经登录的位置,这就是它不显示用户名或密码字段的原因。

要解决这个问题,用户必须从他/她登录的浏览器或 Facebook 退出(最初是为了获得应用权限)到您的应用,这样当用户回到您的应用时并选择 Facebook 登录选项,假设用户也退出了您的应用,然后他/她可以看到它重定向到 Facebook 或浏览器登录页面,其中包含用户名和密码字段。

【讨论】:

以上是关于使用 react-native-fbsdk 注销的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

react-native-fbsdk 发布消息 facebook Graph API FBGraphRequest

让 react-native-fbsdk 与 CocoaPods 一起工作

如何在本机反应中使用 Facebook Messenger api

react-native-fbsdk / Facebook iOS SDK - 未定义不是对象(评估'LoginManager.logInWithReadPermissions')

react-native-fbsdk:“ld:找不到-l-lRNSDKCoreKit的库”

如何在本机反应中使用 Facebook Messenger 对话框?