Facebook javascript sdk FB认证后和FB授权前如何检测

Facebook javascript sdk FB认证后和FB授权前如何检测,facebook-javascript-sdk,Facebook Javascript Sdk,在我的MVC应用程序中,我在JQuery中有以下代码来检查用户是否连接到Facebook应用程序 FB.login(function (response) { switch (response.status) { case "connected": case "unknown": break; } }, { scope: "@MyPermissions" }); 现在,当我通过我的应用程序进行FB登录时,它会进行身份验证

在我的MVC应用程序中,我在JQuery中有以下代码来检查用户是否连接到Facebook应用程序

FB.login(function (response) {
    switch (response.status) {
        case "connected":
        case "unknown":
            break;
    }

}, { scope: "@MyPermissions" });
现在,当我通过我的应用程序进行FB登录时,它会进行身份验证,并立即启动FB应用程序授权,最后在完成授权后进入连接案例


我的问题是:我能在授权开始之前检测Facebook身份验证何时完成吗?这样我的调试器就可以在授权发生之前捕获该位置。实际上,我必须避免授权。

我还没有亲自尝试过,但通过文档中的页面查看,可以得出以下结论

FB.getLoginStatus getLoginStatus允许您确定用户是否登录到 Facebook并已验证您的应用程序。有三种可能 用户的状态:

  • 用户已登录Facebook并已验证您的应用程序(
    已连接
  • 用户已登录Facebook,但尚未对您的应用程序进行身份验证(
    未授权
  • 用户目前未登录Facebook,因此我们不知道他们是否验证了您的应用程序(
    unknown
  • 如果我正确理解了您的问题,您可以检查
    状态
    ,查看是否有
    未授权的案例
    ,如果用户确实已登录但尚未授权您的应用程序,您可以通过该案例进行破解

    但请确保将此案例放置在已连接的
    案例上方

    此外,即使您使用的是
    FB.login
    而不是
    FB.getLoginStatus
    ,这也应该有效,因为根据同一页面的以下引用

    返回给所有这些事件的响应对象与 来自FB.getLoginStatus、FB.login或FB.logout的响应。这一反应 对象包含:

    状态用户的状态。
    已连接
    未经授权
    未知

    authResponseauthResponse对象


    返回的对象是相同的。

    编辑:这是您想要的吗

    否则

    首先,出于安全原因,Facebook登录和应用程序验证是不可分割的。登录Facebook和通过应用程序登录Facebook是不同的。要从外部站点使用Facebook登录,实际上是通过一个应用程序登录,该应用程序要求用户允许该应用程序访问其个人资料的某些部分

    因此,当用户单击登录时。首先,如果他们还没有登录Facebook,他们将被要求登录。您可以在使用FB.getLoginStatus登录之前检查此项

    一旦用户登录到Facebook,他们必须验证你的应用程序,你才能访问他们的信息。此信息也可以使用FB.getLoginStatus获得

    您需要的是一个accessToken来调用api。当您运行登录对话框时,fb js sdk会在内部存储此信息。所以如果你不使用它登录。除非您自己构建api调用,否则api调用将失败

    根据给出的信息,我假设您希望避免在以前登录的用户每次访问页面时显示logging/auth对话框。这是我能想到的唯一一种情况,您可能需要避免显示对话框

    在这种情况下,您可以使用cookie和访问令牌在页面访问期间保持登录状态

    首次登录后,使用cookie在本地存储accessToken。然后对登录逻辑进行编码,以在加载或登录时检查并验证令牌

    这种方式返回到站点不会启动登录/身份验证对话框,除非accessToekn会话用完,但只会将用户状态更改为已登录。然后使用访问令牌构建图形api调用

    我使用
    https://graph.facebook.com/oauth/access_token_info
    使用参数
    客户端id:APPID,访问\u令牌:令牌
    以验证令牌

    如果令牌有效,会话正常,则表示用户已登录并已授权应用程序。如果失败,cookie将被删除,我将退出登录对话框

    还有一些情况需要删除cookie,如authResponseChange或注销

    关于这一点;我相信您想要的后期授权是订阅authResponseChange事件。下面是一个被破坏的实现:

    FB.Event.subscribe('auth.authResponseChange', function(response) {
      if (response.authResponse) {
          if (response.status === 'connected') {
               // User logged in and User has authorized the app
          } 
          else if (response.status === 'not_authorized') {
               // User logged in but has not authorized app    
          }
          else {
              // User logged out                    
          }
      } else {
         // No valid authResponse found, user logged out or should be logged out             
      }
    });
    
    这里有更多的文档

    还有其他一些你可以利用的活动

    身份验证登录-身份验证状态从未知更改为已连接时激发

    auth.authResponseChange-在authResponse更改时激发


    auth.statusChange-在状态更改时触发(有关这意味着什么的更多信息,请参阅FB.getLoginStatus)

    实际上,oAuth是两步授权,您不能在身份验证时停止它

    你可以做一个技巧,通常人们已经登录到facebook,因此你可以在第一次加载时尝试
    getLoginStatus()
    ,它肯定会返回你
    not\u authorized
    ,因为它还没有授权你的应用,你可以执行你的检查,然后获得用户授权

    FB.getLoginStatus(function(response) {
      if (response.status === 'not_authorized') {
        // the user is logged in to Facebook, 
        // but has not authenticated your app
    
    
      } else {
        // the user isn't logged in to Facebook.
      }
     });
    

    你到底想抓什么?如果用户进行身份验证…然后立即出现授权屏幕…我想在某些情况下取消授权。这些方面运气好吗:1)2)3)你能更好地解释一下你的用例吗。您将什么定义为“已完成的身份验证”、“授权开始前”和“在某些情况下我想取消授权”。也许关于这篇文章@abcdefghi,在调用Facebook init之后,为什么不调用getLoginStatus进行验证,并根据您的条件是否匹配,决定是否调用login()。。。?这是您想要的吗?“状态用户的状态