Вы можете проверить, есть ли у пользователя действительный токен доступа, другими словами, был ли он зарегистрирован на вашем сайте в какой-то момент. FB предоставляет вам данные сеанса на внешнем интерфейсе, поэтому получите их так:
FB.getLoginStatus(function(response){
//send the response to the back end in a json string
});
Затем проверьте его на серверной части, используя модифицированную версию проверки подписи прежних версий. Это швы на работу. Пожалуйста, дайте мне знать, если я что-то упустил.
Это только говорит вам, что идентификатор пользователя, токен доступа совпадают для вашего сайта. Не требуется скручивание звонков.
Он не говорит вам, действительно ли сеанс в настоящее время действителен, хотя не полагайтесь на него для вашей банковской системы или чего-либо еще.
function validateFB_sessionObj($sessionObj){//pass me the session data object
$sessionObj = $sessionObj->session;
global $fb;//pull in the secret fb keys
if (!is_object($sessionObj) || !isset($sessionObj->uid) || !isset($sessionObj->access_token) || !isset($sessionObj->sig)){
// warning("facebook session object is lacking something", $sessionObj);
return false;
}
$expectedSig = generateSig($sessionObj, $secret);
if ($sessionObj->sig = $expectedSig){
// status("fb signature looks good");
return true;
} else {
// warning("facebook signature looks wrong", $sessionObj);
return false;
}
}
function generateSig($params, $secret){
$string = $params->access_token . $params->uid . $secret;
return md5($string);
}