3

静的な方法でFacebook接続APIを使用する方法はありますか?

facebook php sdkを使用する場合、facebookにログインするためのリンクまたはボタンはhttps://www.facebook.com/dialog/oauth .................のようなものです。

私が欲しいのは、すべてのページにphp sdkを含めることを排除することです。これは、ピーク時に余分な処理とサーバーの負荷が発生するためです。

ユーザーがログインしているかどうかを確認するためにセッションチェックを行います。たとえば、FacebookのユーザーIDと名前がセッションに保存されているかどうかを確認し、保存されていない場合は、静的ログインボタンを表示します。次に、facebookでログインした後、彼はfacebook-login.phpにアクセスします。これには、facebook php sdkが含まれ、データを処理してセッションに保存するため、各ページにphpsdkを含めずにログに記録されたままになります。

$ facebook-> getLoginUrl()で取得するURL構造は次のとおりです。

https://www.facebook.com/dialog/oauth?client_id= {MY_APP_KEY}&scope = {PERMISSIONS}&redirect_uri = {MY_SITE / facebook-login.php}&state = {A_32_CHAR_CODE_LIKE_MD5_MAYBE}

最後の質問は次のとおりです。ログインボタンのURLは何でしょうか。

4

3 に答える 3

0

これは良い質問です。まず、ユーザーがアプリにログインしているということは、ユーザーの有効なアクセストークンがあることを意味します

また、このアクセストークンを使用してAPI呼び出しを行う前に、アクセストークンが有効であることを確認する方法はありません。したがって、ユーザーが引き続き各ページにログインしていることを確認する場合は、各ページでFacebookへのAPI呼び出しを行う必要があります。ちょっと重いですが、他に解決策はありません。

実行できることは、所有しているアクセストークンが有効であると想定し、たまにのみチェックすることです(ユーザーがログインしていることを本当に確認する必要がある場合)。

あなたは異なるシナリオを持つことができます:

  • ユーザーに関するFacebookデータがありません。ユーザーがアプリに確実にログインしていません。

  • ユーザーIDを読み取ることはできますが、このユーザーのアクセストークンがない可能性があります。ユーザーがログインしていない可能性があります。

  • アクセストークンを読み取ることはできますが、有効でない可能性があります(有効期限が切れているか、ユーザーによって取り消されています):ユーザーがログインしていない可能性があります。

  • 有効なアクセストークンがあります:ユーザーは確実にログインしています。

セッションでユーザーIDとアクセストークンを読み取ることができます。セッション配列は次のようになります。

[fb_148195765253871_access_token] => 14819576525...
[fb_148195765253871_user_id] => 1536397056

配列のキーの番号(ここ148195765253871)はアプリIDです。

したがって、各ページで実行できることは、これらのキーが設定されているかどうかを確認し、設定されていない場合は、SDKをロードして再確認することです(SDKが読み取っている他の場所にアクセスを保存できるため):

if (isset($_SESSION['fb' . YOUR_APP_ID . 'access_token'])) {
    // assume to user is logged in
    // and keep going
} else {
    require "facebook.php";
    $facebook = new Facebook(array(
        'appId'  => YOUR_APP_ID,
        'secret' => YOUR_APP_SECRET,
    ));

    // Make an API call to be sure the user is logged in
    // ie : that you have a valid access token
    $user = $facebook->getUser(); // User ID
    if ($user) {
        try {
            $user_profile = $facebook->api('/me');
        } catch (FacebookApiException $e) {
            $user = null;
        }
    }

    if ($user) {
        // The user is logged in for sure
    } else {
        // The user is not logged in for sure
        // Make him log in
        echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>';
    }
}

お役に立てば幸いです。

于 2011-05-31T00:47:40.147 に答える
0

SDK をロードして、次のようにします。

echo '<a href="' . $facebook->getLoginUrl( array('next'=>'http://mysite.com', 'req_perms' => 'email,read_stream,publish_stream')) . '">Connect to Facebook</a>';

その URL は、ログアウトしたユーザーに対して常に有効です。

于 2011-05-30T18:08:47.540 に答える
0

選択された回答は、質問に対する実際の回答ではありません。

getLoginUrl 関数呼び出しを生成するために必要なすべての Facebook コードを別のファイルに分離したい場合は、メタ リフレッシュを使用して簡単に実行できます。

したがって、ヘッダーで「Login With Facebook」から「facebook_login.php」へのリンクを指定します。このページに、getLoginUrl の SDK からの必要な呼び出しを含め、次の HTML 行を追加します。

<meta http-equiv="refresh" content="0;URL=<?=$helper->getLoginUrl(array('email', 'user_friends'));?>">

これを何度もテストしましたが、うまくいきます。

参考までに、Facebook SDK 4.0 を使用しています。

于 2014-10-14T03:16:03.147 に答える