我在我的网站上添加了 Facebook 登录。
一切都很好,但这是我害怕的一种情况。
用户通过 Facebook 登录在我的页面上注册帐户。他可以通过 Facebook Login 登录我的网站。用户登录了我的网站,同时他在 facebook.com 上的自己帐户中删除了我的应用程序。
现在怎么办?我如何检查该用户的帐户中是否还有我的应用程序?
我假设“我的应用程序仍在他的帐户上”是指您的应用程序仍然有权使用您请求的任何权限/用户在登录您的网站时授予的任何权限访问该用户的帐户。
如果您已按照 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 库中上面代码中使用的函数。