0

フェイスブックが過去1年間に行ったすべての変更以来、多くのことが変更されています。Web上にいくつかの解決策がありますが、それらはもはや機能しません。(これのように:PHPまたはJavaScript Facebook SDKを使用して、ユーザーを自分のWebサイトにログインさせ続けるにはどうすればよいですか?

私のウェブサイトにFacebookConnectとPHPfacebookSDKを実装しました。問題は、私のアプリをすでに承認していて、Facebookにもログインしているユーザーにあります。この場合、接続ボタンをもう一度押す必要のない自動ログインが必要です。php + jsを使用してそれを行う方法があると思いますが、方法が見つからず、いくつかのことを試したと信じています。問題は、phpユーザーがチェックすることです

$user  = $facebook->getUser(); 

Facebookのセッションを認識していないので、JSでトリガーできると思います。そのため、JSのページにこのコードを追加するのに疲れました。ALRETSはユーザーが接続されていると言って動作していますが、PHPへのセッションパスがないため、PHP SDKはユーザーが接続されていることを認識しません:

<div id="fb-root"></div>
    <script>
      window.fbAsyncInit = function() {
        FB.init({
              appId  : '<?=FACEBOOK_APP_ID?>',
              status : true, // 
              cookie : true, // 
              xfbml  : true, //
              oauth  : true
        });

      // Additional initialization code here
 //--------> this isn't need to work its only a check
FB.getLoginStatus( function(response) {
    //console.log(response);
    if (response.status === 'connected') {
        var accessToken = response.authResponse.accessToken;
        alert(accessToken);
    } else if (response.status === 'not_authorized') {
        //login function
    } else {
        //login function
    }
}, true);

FB.Event.subscribe('auth.authResponseChange', function(response) {
    //console.log('The status of the session changed to: '+response.status);
    alert(response.status);
});

 //--------> END OF CHECK!!
      };
      // Load the SDK Asynchronously
      (function(d){
         var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
         if (d.getElementById(id)) {return;}
         js = d.createElement('script'); js.id = id; js.async = true;
         js.src = "//connect.facebook.net/<?=$fb_api_lang?>/all.js#xfbml=1";
         ref.parentNode.insertBefore(js, ref);
       }(document));
    </script>

誰かがこの問題の解決策を見つけて共有できれば、大いに感謝されます。

4

2 に答える 2

1

問題は、phpユーザーチェック$user = $facebook->getUser();がFacebookセッションを認識しないことです

もちろんできません。サーバー側では、ドメインに設定されたCookieにしかアクセスできないためです。ただし、Facebookは、ユーザーがそのドメインにいてFacebookと対話しない限り、ドメインにCookieを設定することはできません。

JSでトリガーできるかもしれないと思います。

JavaScript SDKを埋め込み、初期化してcookie: trueパラメーターを設定するだけです。これにより、JS SDKはドメインの下にCookieを設定し、PHPは次のリクエストでCookieを読み取ることができます。

リピーターを「すぐに」認識したい場合は、クライアント側でこれを確認し、適切な条件が満たされたときにページを1回リロードする必要があります。JSSDKはリピーターFB.getLoginStatusを認識しましたが()、PHPは彼を認識しませんでしたまだ(PHPコードに変数/フラグを設定してもらい、JSが評価できるようにします)–次に、JSを介してページをリロードし、PHPがクライアント側のJSによって設定されたばかりのCookieを読み取れるようにします。

于 2012-07-26T10:05:30.160 に答える
0

適切に実行していますか:

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

このメソッドを呼び出す前に?同じドメインを使用していますか?

于 2012-07-26T09:39:36.957 に答える