1

そのため、FB ログイン ボタンを使用してユーザーがログインできるようにしています。FB ログイン ボタンをクリックすると、ユーザーは fb_redirect.php というファイルにリダイレクトされ、php がセッションを開始できるようになります。

window.fbAsyncInit = function() 
{
    FB.init({
        appId: '12345', 
        status: true, 
        cookie: true, 
        xfbml: true
    });
    FB.Event.subscribe('auth.login', function(response) 
    {
        window.location = '/fb_redirect.php';
    });
};

fb_redirect ファイルには、次のものがあります。

session_start();
require("model/facebook_api/src/facebook.php");

$facebook = new Facebook(array(
    'appId' => '12345',
    'secret' => '12345'
));

$access_token = $facebook->getAccessToken();
$facebook->setAccessToken($access_token);

if($access_token != "") 
{
    $user = $facebook->getUser();

    if($user != 0)
    {
        $user_profile = $facebook->api("/".$user);  
        $fb_id = $user_profile['id'];
        $fb_first_name = $user_profile['first_name'];
        $fb_last_name = $user_profile['last_name'];
        $fb_email = $user_profile['email'];

        $_SESSION['login'] = "true";
    }
}

header("Location:index.php");

ファイルで何が起こるかは、ややこしいです。それは本当に当たりか外れです。すでに FB にログインしている場合、FB ログイン ボタンを使用して自分のサイトにログインしようとすると、画面がポップアップしてすぐに消えます。しかし、それは私のサイトにログインしません。

FB にログインしていない状態で自分のサイトにログインしようとすると、画面がポップアップし、FB にログインするように求められます。ポップアップ画面で FB に正常にログインすると、リダイレクトが発生します。しかし、そうすると、有効なアクセス トークンが必要であることを知らせるエラー メッセージが表示されます。また、セッションを設定せずにホームページにリダイレクトするだけの場合もあります。したがって、アクセストークンがまったく設定されていなかったと推測しています。

アクセストークンを手動で設定する必要がある可能性があることをどこかで読みました。だから、私は試しました:

$facebook->setAccessToken($access_token);

しかし、それはうまくいきませんでした。

これを理解する方法がわかりません。何か案は?

4

1 に答える 1

1

それが役立つかどうかはわかりませんが (正直なところ、FB SDK は非常に用途が広いため)、FB のガイドラインでは、アクセス トークンを取得する前にユーザーを取得することをお勧めします。おそらく(単なる理論です)すでにログインしている場合、 getUser() メソッドを実行するまで $facebook オブジェクトでアクセストークンを使用できません...アクセスを取得する前にユーザーを取得することは合理的だと思いますトークン。

于 2013-05-30T15:34:30.467 に答える