WebプロジェクトでFacebook登録を使用しています。ほとんどの場合、登録は正常に機能しますが、Facebookのiframeがfbuidをphpスクリプトに送信しない場合があります...
これはFacebookのバグですか?回避策はありますか?
これがFacebookのifranmeです。
<iframe src="https://www.facebook.com/plugins/registration?
client_id=####&
redirect_uri=http://****/pre-login/facebook/fb_register_respond.php&
fields=name,email"
scrolling="auto"
frameborder="no"
style="border:none;display:block;"
allowTransparency="true"
width="350"
height="330">
</iframe>
一部の登録では、fbuidはfalseです。ユーザーがFacebookに接続していないか、すでにFacebookに登録されている場合、iframeは表示されません。
これがphpコードです:
define('FACEBOOK_APP_ID', '####');
define('FACEBOOK_SECRET', '####');
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
error_log('Unknown algorithm. Expected HMAC-SHA256');
return null;
}
// check sig
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}
return $data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
if ($_REQUEST) {
$response = parse_signed_request($_REQUEST['signed_request'], FACEBOOK_SECRET);
// Die email Adresse des Users.
$email = $response['registration']['email'];
// Das Passwort (fb-user-id) des Users.
$fbuid = $response['user_id'];
} else {
// Im Fehlerfall.
echo '$_REQUEST is empty';
exit;
}