[ページ]タブから実行するアプリがあります。アプリへのログインはJavascriptを介して行われます。
function facebooklogin() {
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
//user authorized
//SubmitLogin(response);
fbid = response.authResponse.userID; //valid response returned
token = response.authResponse.accessToken; //valid response returned
SubmitLogin();
}
else if (response.status === 'not_authorized') {
FB.login(function (response) {
if (response.authResponse) {
// user authorized
//SubmitLogin(response);
fbid = response.authResponse.userID; //valid response returned
token = response.authResponse.accessToken; //valid response returned
SubmitLogin();
} else {
// user cancelled
alert("User authorization is required for taking part in this promo.");
}
}, {
scope: 'user_about_me,user_birthday,user_checkins,user_hometown,user_location,publish_stream,email'
});
} else {
// the user isn't logged in to Facebook.
}
});
}
function SubmitLogin() {
//$("#token").val(response.authResponse.accessToken);
//$("#fbid").val(response.authResponse.userID);
//$("#login_form").submit();
$("#print_me").prop("href", "printable.php?fbid=" + fbid);
if (fbid != "") {
$.post("submit_user.php", "fbid=" + fbid + "&token=" + token, function(msg) {
var spl = msg.split("|");
if (spl.length == 3) {
//this part isn't an issue since the code never reaches it
post_wall();
$("#share_section").css({display: "none"});
$("#reward_section").css({display: "block"});
FB.Canvas.setSize();
$("#coupon_printout").html(spl[0]);
$("#qr_holder").html(spl[1]);
$("#expiration").html(spl[2]);
}
else {
//code always lands here because of the error in the php script
alert(msg);
}
});
}
else {
alert("You have not signed in to this app. If you did not see a sign in request, you may need to disable your pop-up blocker.");
}
}
戻り値をエコーすると、ユーザーのFacebookIDとアクセストークンが正しく返されます。次に、これらをアプリにサインインするPHPスクリプトに渡します。この時点まではすべて正常に機能します。
require 'facebook.php';
$facebook = new Facebook(array(
'appId' => /*my app ID*/,
'secret' => /*my app secret*/,
'cookie' => true
));
$signedRequest = $facebook->getSignedRequest(); //is blank
$user_id = $facebook->getUser(); //user's FacebookID gets returned
$user_profile = $facebook->api('/me','GET'); //OAuth error gets thrown
これは、SafariでOAuthエラーがスローされる部分までの私のPHPコード全体です。郵送で渡したアクセストークンを印刷してみましたが、表示されます。ただし、getAccessToken()は別の値を出力します。
この領域の他のブラウザではエラーは発生していません。
編集:ファイルを別のサーバーに移動すると、一部のブラウザーで機能し始めましたが、他のブラウザーでは違いはありませんでした。