FB.login如果用户之前连接了应用程序,则将成功登录与取消区别

时间:2019-03-15 15:15:54

标签: facebook facebook-javascript-sdk facebook-login

我们有这样的FB.login调用:

FB.login(function (response) {
  if (response.status === 'connected') {
    responseFunction(response.authResponse.userID);
  } else {
    responseFunction(null);
  }
}, { scope: requiredPermissions.concat(optionalPermissions).join(','), return_scopes: true });

如果用户尚未连接到应用程序,它将正确检测到已取消的登录。但是,如果用户在取消登录时已经连接,则response如下所示:

authResponse: {
  accessToken: "token",
  data_access_expiration_time: 1560437437,
  expiresIn: 86963,
  reauthorize_required_in: 7776000,
  signedRequest: "bababa",
  userID: "userid"
},
status: "connected"

几乎完全像一个成功的登录响应。幸运的是,如果登录正确完成(由于有grantedScopes选项),则响应中还会有一个return_scopes字段。但是,使用它来区分这两种方法似乎不可靠且不可靠。

有更好的方法吗?

提前谢谢!

更新: 为什么不使用FB.getLoginStatus?

对于上下文:在我的情况下,FB.login用于授予访问用户页面的权限。它本身并不用于将其登录到应用程序中。

如果有人在我的推理中指出错误,我会很高兴。在这里:

  1. 由于浏览器中的模式块,在FB.getLoginStatus之后立即调用FB.login是不可靠的。 FB.login需要在点击处理程序中同步调用。
  2. 如果在显示调用FB.login的按钮之前被调用,则
  3. FB.getLoginStatus结果可能并且将过期。在单击该按钮之前,用户可能会并且将在此特定页面上花费大量时间。

这就是按钮单击处理程序立即调用FB.login的原因。它有助于避免上述两个问题。

1 个答案:

答案 0 :(得分:0)

最终,我以grantedScopes的出现作为登录完成的指示。