0

私は自分のウェブサイトにfb通知を表示するためにこのFacebookアプリを持っています。次に、この問題が発生しました。2人のユーザーのAliceとBobを想定します。アリスは私のウェブサイトの常連ユーザーであり、彼女はボブにそれを勧めました。彼女は彼を自分のラップトップから私のサイトに登録させました。bobがアプリを追加しようとすると、Aliceのfb通知が表示されました。実際、ボブがログインリンクをクリックすると、アリスはすでにFacebookにログオンしているため、彼女の詳細(同じセッション)、この状況に対処する方法を取得しました。アリスをFacebookからログアウトさせ、ボブにログインさせる必要がありますか。ログインして、別のユーザーとしてサインインしてください」、誰かがいくつかの解決策とそれを行う方法を提案してもらえますか?

以下は、ログインに使用しているコードです。

        require_once('sdk/src/facebook.php');

        $facebook = new Facebook(array(
          'appId'  => 'xxxxxxxxxxxxxxxx',
          'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
          'cookie' => true
        ));


        // Get User ID
        $user = $facebook->getUser();


        // Login or logout url will be needed depending on current user state.
        if ($user) {
          $logoutUrl = $facebook->getLogoutUrl();
        } else {
          $loginUrl = $facebook->getLoginUrl();
        }


        //check permissions list

        if ($user) {
            $permissions_list = $facebook->api('/me/permissions','GET', array('access_token' => $access_token));


             //check if the permissions we need have been allowed by the user
            //if not then redirect them again to facebook's permissions page
            //
            $permissions_needed = array('manage_notifications','publish_stream', 'read_stream');
            $login_url_params = array(
                        'scope' => 'manage_notifications,publish_stream,read_stream',
                        'fbconnect' =>  1,
                        'display'   =>  "page",
                        'next' => 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
                    );
            foreach($permissions_needed as $perm) {
                if( !isset($permissions_list['data'][0][$perm]) || $permissions_list['data'][0][$perm] != 1 ) {
                    $login_url_params = array(
                        'scope' => 'manage_notifications,publish_stream,read_stream',
                        'fbconnect' =>  1,
                        'display'   =>  "page",
                        'next' => 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
                    );
                    $login_url = $facebook->getLoginUrl($login_url_params);
                    echo $login_url;
                    header("Location: {$login_url}");
                    exit();
                }
            }               

            //if the user has allowed all the permissions we need,
            //get the information about the pages that he or she managers
            $accounts = $facebook->api(
                '/me',
                'GET',
                array(
                    'access_token' => $access_token
                )
            );              
        } 

          else {
            //if not, let's redirect to the ALLOW page so we can get access
            //Create a login URL using the Facebook library's getLoginUrl() method
            $login_url_params = array(
                'scope' => 'manage_notifications,publish_stream,read_stream',
                'fbconnect' =>  1,
                'display'   =>  "page",
                'next' => 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
            );
            $login_url = $facebook->getLoginUrl($login_url_params);

            //redirect to the login URL on facebook
            $facebook_login = $login_url;
             echo "<a href='$login_url'>Login Facebook</a>";
4

2 に答える 2

3

最善の方法は次のとおりです。

  1. ユーザーがサイトにアクセスしたら、Facebookにログインしているかどうか、およびJavascript SDKとFB.getLoginStatusメソッドを使用して、ユーザーがアプリに対して認証されているかどうかを検出します。
  2. 認証されていない場合は、[権限]ダイアログでプロンプトを表示し、サインアップするように促します。
  3. それらが認証されてFBにログインしている場合は、自動的にWebサイトにログインします。アリスとボブの混乱を避けるために、ウェブサイトのどこかに「アリス」としてログインしていることを示すインジケーターを表示し、その下に「あなたではありませんか?」というリンクを表示します。他の誰かとしてログインするには、ここをクリックしてください。
  4. このリンクをクリックするか、サイトのログアウトリンクをクリックすると、Javascript SDKのFB.logoutメソッドが呼び出され、そのユーザーの現在のアクセストークンが無効になりますが、Facebookからもログアウトされます。

次に、この後、ログイン/登録ページにプッシュバックすると Facebookアカウントにログインするように求められます。

于 2012-07-25T21:20:14.350 に答える
2

私の知る限り、新しいユーザーは前のユーザーをFacebookからログアウトし、最初に自分でログインする必要があります

ログイン/認証ポップアップやローカルに保存されたFacebookセッションデータを制御することはできないため、ボブがログインを押してログインをアリス(あなたではない?)として表示すると、彼はあなたではなく'を押すことになっていますか?'、これはFacebookからアリスをログアウトし、ボブにログインしてから承認するように促します。ただし、ボブが離れてアリスがFacebook.comにアクセスすると、ボブのアカウントにログインするため、これには問題があります。

考えられる解決策の1つは、現在ログインしているユーザーの名前とプロフィール写真を取得し、 [ Facebookでログイン]ボタンの横に表示することです。それはユーザーに物事を明確にするのに役立つかもしれません。認証されなくてもこの情報を表示できるはずであり、Facebookからログアウトするための独自のリンクを提供することもできます。

于 2012-07-25T21:21:05.300 に答える