0

我在我的网站上添加了 Facebook 登录。

一切都很好,但这是我害怕的一种情况。

用户通过 Facebook 登录在我的页面上注册帐户。他可以通过 Facebook Login 登录我的网站。用户登录了我的网站,同时他在 facebook.com 上的自己帐户中删除了我的应用程序。

现在怎么办?我如何检查该用户的帐户中是否还有我的应用程序?

4

1 回答 1

2

我假设“我的应用程序仍在他的帐户上”是指您的应用程序仍然有权使用您请求的任何权限/用户在登录您的网站时授予的任何权限访问该用户的帐户。

如果您已按照 Facebook 的说明在您的网站 ( https://developers.facebook.com/docs/facebook-login/getting-started-web/ ) 上实施 Facebook 网页登录,您可能已经准备好处理用户撤销 FB您的应用程序的权限(或从允许访问他/她的帐户的权限中删除您的应用程序)。基本上,当用户访问您的网站并使用 Facebook 登录时,您会向 FB API 发送请求以检查他们当前的登录状态:

https://developers.facebook.com/docs/facebook-login/login-flow-for-web/#checklogin

如果返回的结果表明他们实际上是登录到 Facebook 而不是您的应用程序,您需要要求他们授权您的应用程序(几乎遵循与他们第一次使用 Facebook 登录注册您的网站时相同的流程,不包括在您的网站上为他们创建新帐户的部分):

https://developers.facebook.com/docs/facebook-login/login-flow-for-web/#login

这会将其添加回他们的帐户,直到再次删除。请记住在该用户重新授权您的应用程序时更新您的身份验证令牌。

- - 编辑 - -

您使用的是 Facebook 提供的 PHP SDK 库还是您自己的?无论哪种情况,您都应该将用户的登录状态以及您从 FB 收到的访问令牌存储在您的应用中。每次用户访问您的站点时,您都​​需要使用这些(就像任何其他需要用户身份验证逻辑的站点一样)。

这些是关于检查用户登录状态的 FB 说明: https ://developers.facebook.com/docs/facebook-login/login-flow-for-web-no-jssdk/

这是适用于我的应用程序的快速代码还原(使用 Facebook 的 PHP SDK 库)(为了代码简洁/清晰而删除了错误处理)。Facebook PHP SDK 库被加载到

$this->facebook

在下面的功能代码之前。

    function facebook_login(){     
      $user = (int)$this->facebook->getUser();
     /*the above line will get you either facebook user id in case of user being already logged in to Facebook and your app or 0 otherwise*/
      if($user){
        if(!$this->have_access_token(/*...*/)){
          /* if you don't have user's FB access token in local storage you need to obtain and set it now */
          $this->facebook->setExtendedAccessToken(); // Get a long-lived access token
          $userAccessToken = $this->facebook->getAccessToken(); // Set the user's access token
          $this->save_access_token('access_token', $userAccessToken); // Store to prevent unnecessary API calls
         } else {
            $userAccessToken = $this->get_user_access_token(/*...*/); // Set the user's access token from local app storage            
         }  
        if (!empty($userAccessToken)) {
          /*the $user variable now contains facebook_id of the current user
            you can do whatever else you need with it at this point
          */
        }


    } else {
       // The user has not been authenticated--generate a new login url and show FB login dialogue
       $fbLoginParams = array(
           'scope' => '[your permissions requirements here]',
           'redirect_uri' => '[your redirect url here]'
        );
       $login_url = $this->facebook->getLoginUrl($fbLoginParams);
       header("Location: " . $login_url);
    }

  }

如果您出于某种原因编写了自己的库,您可能可以从 FB 指令、上面的代码片段中设计出类似的功能,并且一定要看看 Facebook 的 PHP 库中上面代码中使用的函数。

于 2013-08-12T17:38:54.827 回答